2010-10-15 12 views

Répondre

35

Je suis très en retard dans la réponse à votre question, mais permettez-moi de répondre de toute façon afin de le garder comme référence pour les autres.

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

cela permettra le comportement de bascule que vous recherchez.

+0

Merci pour le partage. Cela fonctionne bien. – fehays

+2

je vois ça fonctionne comme prévu mais honnêtement, je ne comprends pas comment! Pouvez-vous expliquer pourquoi ce code fonctionne (je veux dire comment il est désélectionné lors du second clic?) – HungryCoder

+3

Cela ajoute simplement la métaKey (Ctrl) à l'événement "mousedown", ce qui force le même comportement que si vous aviez appuyé sur Ctrl . – Novalis

0

Est-ce que c'est ce que vous voulez dire?

Cet événement est déclenché à la fin de l'opération de sélection, sur chaque élément retiré de la sélection.

exemples de code

offre une fonction de rappel pour gérer l'événement comme une option non sélectionnée init.

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

Source:

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

+0

Eh bien ce dont j'ai besoin est de déclencher cet événement non sélectionné quand un élément sélectionné est cliqué. À l'heure actuelle, cet événement se déclenche uniquement lorsque je clique sur un autre élément sélectionnable. – fehays

11

Eh bien voici ce que je viens fini par faire. J'ai utilisé un nom de classe pour basculer entre sélection et désélection. J'aimerais entendre s'il y a une autre option:

$("#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 maintenant je reçois ce que tu mets! Pardon! – Trufa

+0

Pas de problème @Trufa. Je suis sûr que je ne l'ai pas très bien expliqué. Merci d'avoir essayé d'aider. – fehays

+1

Notez que pour changer un nom de classe, vous pouvez simplement utiliser 'toggleClass ("selectedFilter")'. Pas besoin de vérifier si un élément a une classe. ToggleClass le fait pour vous. – Kriem

2

Si vous voulez que les sélections existantes soient préservées et encore avoir l'opération de bascule, il vous suffit d'ignorer l'événement pour la solution désélectionné donnée. Vous devez également supprimer la classe sélectionnée par l'interface utilisateur.

$("#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 
    } 
} 
}); 
Questions connexes