2010-10-15 14 views

Respuesta

35

llego muy tarde respondiendo a su pregunta, pero permítanme que la responda de todos modos para que siga siendo una referencia para los demás.

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

esto permitirá el comportamiento de alternar que usted está buscando.

+0

Gracias por compartir. Eso funciona bien. – fehays

+2

veo que está funcionando como se esperaba pero, sinceramente, ¡no entiendo cómo! ¿Puedes explicar por qué este código está funcionando (me refiero a cómo se está desmarcando en el segundo clic?) – HungryCoder

+3

Esto simplemente agrega la metaKey (Ctrl) al evento "mousedown", que obliga al mismo comportamiento como si hubieras presionado Ctrl tú mismo . – Novalis

0

¿Es esto lo que quieres decir?

Este evento se desencadena al final de la operación de selección, en cada elemento eliminado de la selección.

Ejemplos de código

de Suministro una función de devolución de llamada controlen el evento no seleccionado como una opción de inicio.

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

Fuente:

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

+0

Bueno, lo que necesito es activar este evento no seleccionado cuando se hace clic en un elemento seleccionado. En este momento, este evento solo se dispara cuando hago clic en otro elemento seleccionable. – fehays

11

Bueno esto es lo que acaba de terminar haciendo. Usé un nombre de clase para alternar seleccionando y deseleccionando. Me gustaría saber si hay otra opción:

$("#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 bien ahora entiendo lo que haces! ¡lo siento! – Trufa

+0

No hay problema @Trufa. Estoy seguro de que no lo expliqué muy bien. Gracias por intentar ayudar. – fehays

+1

Tenga en cuenta que para cambiar el nombre de una clase, simplemente puede usar 'toggleClass ("selectedFilter")'. No es necesario verificar si un elemento tiene una clase. ToggleClass hace eso por ti. – Kriem

2

Si desea que las selecciones existentes ser preservado y sin embargo tener la operación de conmutación, sólo hay que pasar por alto el evento no seleccionado para la solución dada. También necesita eliminar la clase seleccionada por la 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 
    } 
} 
}); 
Cuestiones relacionadas