2010-10-15 33 views

risposta

35

Sono molto in ritardo nel rispondere alla tua domanda, ma lascia che risponda comunque in modo da mantenerlo come riferimento per gli altri.

$(".selector").bind("mousedown", function (e) { 
    e.metaKey = true; 
}).selectable(); 

questo consentirà il comportamento di commutazione che stai cercando.

+0

Grazie per aver condiviso. Funziona bene. – fehays

+2

vedo che funziona come previsto ma onestamente, non capisco come! puoi spiegare perché questo codice funziona (voglio dire come si deseleziona al secondo clic?) – HungryCoder

+3

Questo aggiunge semplicemente metaKey (Ctrl) all'evento "mouse", che forza lo stesso comportamento come se avessi premuto Ctrl te stesso . – Novalis

0

È questo che intendi?

Questo evento viene attivato al termine dell'operazione di selezione, su ciascun elemento rimosso dalla selezione.

Esempi di codice

alimentazione una funzione di callback per gestire l'evento non selezionato come opzione init.

$(".selector").selectable({ 
    unselected: function(event, ui) { ... } 
}); 
Bind to the unselected event by type: selectableunselected. 
$(".selector").bind("selectableunselected", function(event, ui) { 
    ... 
}); 

Fonte:

http://jqueryui.com/demos/selectable/#event-unselected

+0

Bene, ciò di cui ho bisogno è di attivare questo evento non selezionato quando si fa clic su un elemento selezionato. Al momento, questo evento si attiva solo quando faccio clic su un altro elemento selezionabile. – fehays

11

Bene, ecco quello che ho appena finito per fare. Ho usato un nome di classe per attivare la selezione e la deselezione. Mi piacerebbe sapere se c'è un'altra opzione:

$("#selectable").selectable({ 
    selected: function (event, ui) { 
     if ($(ui.selected).hasClass('selectedfilter')) { 
      $(ui.selected).removeClass('selectedfilter'); 
      // do unselected stuff 
     } else {    
      $(ui.selected).addClass('selectedfilter'); 
      // do selected stuff 
     } 
    }, 
    unselected: function (event, ui) { 
     $(ui.unselected).removeClass('selectedfilter'); 
    } 
}); 
+0

Ahh ok ora ho capito cosa ti importa! scusa! – Trufa

+0

Nessun problema @Trufa. Sono sicuro di non averlo spiegato molto bene. Grazie per aver cercato di aiutare. – fehays

+1

Nota che per cambiare un nome di classe puoi semplicemente usare 'toggleClass ("selectedFilter")'. Non c'è bisogno di verificare se un elemento ha una classe. ToggleClass lo fa per te. – Kriem

2

Se si desidera che le selezioni esistenti essere conservato e hanno ancora l'operazione di commutazione, è sufficiente ignorare l'evento non selezionato per la soluzione data. Inoltre è necessario rimuovere la classe selezionata da ui.

$("#selectable").selectable({ 
selected: function (event, ui) { 
    if ($(ui.selected).hasClass('selectedfilter')) { 
     $(ui.selected).removeClass('selectedfilter').removeClass('ui-selected'); 
     // do unselected stuff 
    } else {    
     $(ui.selected).addClass('selectedfilter').addClass('ui-selected'); 
     // do selected stuff 
    } 
} 
}); 
Problemi correlati