.selectable evitare deselezione al secondo click
Taggato: adattare .selectable()
- Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 13 anni, 9 mesi fa da s3r4.
- AutorePost
- 17 Luglio 2010 alle 11:12 #1549s3r4Partecipante
ho un problema con .selectable(), o meglio vorrei alterarne il normale funzionamento al fine di evitare che, finita un selezione e iniziata una seconda venga annullata la prima.
Per essere più chiaro vorrei poter simulare il comportamento della select multipla quando si tiene premuto CTRL, ma senza doverlo tenere premuto.
Come posso adattare selectable a tale scopo?
Grazie in anticipo per la risposta
18 Luglio 2010 alle 09:03 #1756jqueryitaliaAmministratoreCI sono 2 possibili soluzioni:
– usare il plugin toChecklist ( http://www.scotthorlbeck.com/code/tochecklist/ )
– usare il seguente codice:
$(document).ready(function() {
var selected = new Array();
$(‘select’).mouseover(function() {
if (this.multiple == true) {
for (var i=0,a=0;i<this.options.length;i++) {
if (this.options.selected == true) {
selected[a] = this.options.value;
a++;
}
}
}
});
// salva i valori quando esegui il click
$(‘select’).click(function() {
// make sure it’s a multiple select
if (this.multiple == true) {
for(var i=0;i<selected.length;i++) {
for(var a=0;a<this.options.length;a++){
if (selected == this.options[a].value && this.options[a].selected == true) {
this.options[a].selected = false;
selected.splice(i,1);
} else if (selected == this.options[a].value) {
this.options[a].selected = true;
}
}
}
}
// carica tutte le options selezionate in un array quando il puntatore del mouse passa sopra la select
if (this.multiple == true) {
for (var i=0,a=0;i<this.options.length;i++) {
if (this.options.selected == true) {
selected[a] = this.options.value;
a++;
}
}
}
});
});
19 Luglio 2010 alle 12:59 #1757jqueryitaliaAmministratoreHo trovato anche questo interessante link che, molto probabilmente, potrebbe esserti d’aiuto:
😉
19 Luglio 2010 alle 19:58 #1758s3r4Partecipantetochecklist non va bene perchè voglio mantenere la possibilità di selezionare più elementi semplicemente tenendo premuto il tasto sinistro del mouse e trascinando
Lo script non va bene perchè non opero su una select ma su un div selectable
L’esempio della prenotazione posti non va bene perchè non mi piace la selezione singola, quella so farla tranquillamente.
Sono riuscito ad evitare che le selezioni annullino le selezioni precedenti studiando il comportamento di selectable
Ho scoperto che vengono aggiunti all’attributo class i seguenti valori:
-ui-selectee (per tutti gli elementi che corrispondono a filter)
-ui-selecting(durante la fase selecting)
-ui-selected(durante la fase stop)
-ui-unselecting(assegnato agli elementi precedentemente selezionati durante la selecting)
Praticamente giocando con il valore dell’attributo class riesco ad evitare la deselezione rimuovendo ui-unselecting e mettendo ui-selected.
Resta quindi il problema dell’impossibilità di deselezionare senza premere CTRL, ho provato a gestire al click la deselezione su elementi ui-selected ma qualunque cosa io faccia viene in un certo senso scavalcata dal comportamento previsto dal plugin ui selectable, che di fatto al click su un elemento prima aggiunge ui-selecting quindi ui-selected.
Ultima idea che mi sta venendo in questo momento consiste nel variare l’attributo che controllo in filter così da rendere l’oggetto selezionato non trattabile dal plugin, e quindi gestibile a mio piacimento.
Resto dunque nella speranza che sia possibile intervenire in maniera più pulita, così da sfruttare le potenzialità del plugin senza stravolgerlo e continuo a fare altre prove.
Intanto grazie per le risposte.
- AutorePost
- Devi essere connesso per rispondere a questo topic.