Register

jQuery Italia - Forum » Supporto ed Aiuto » Problemi con jQuery UI

.selectable evitare deselezione al secondo click

(4 articoli)
  1. s3r4
    Membro

    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

    Pubblicato 1 year fa #
  2. jqueryitalia
    Amministratore

    CI 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[i].selected == true) {
    selected[a] = this.options[i].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[i] == this.options[a].value && this.options[a].selected == true) {
    this.options[a].selected = false;
    selected.splice(i,1);
    } else if (selected[i] == 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[i].selected == true) {
    selected[a] = this.options[i].value;
    a++;
    }
    }
    }

    });
    });

    Pubblicato 1 year fa #
  3. jqueryitalia
    Amministratore

    Ho trovato anche questo interessante link che, molto probabilmente, potrebbe esserti d'aiuto:

    http://www.digital-web.com/extras/jquery_crash_course/

    ;-)

    Pubblicato 1 year fa #
  4. s3r4
    Membro

    tochecklist 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.

    Pubblicato 1 year fa #

RSS feed for this topic

Replica

Devi aver fatto il login per poter pubblicare articoli.