2011-04-19 19 views
6

Estoy usando JQuery UI - Selectable. Deseo anular la selección del elemento si se ha presionado y ya se ha seleccionado (alternar)Cómo implementar funcionalidad de alternar en JQuery UI Seleccionable?

¿Podría ayudarme a agregar esta funcionalidad, por favor?

+2

¿Alguna de estas respuestas te sirvió de ayuda? –

+1

Este es un método que funciona muy bien: hace que el valor predeterminado sea como si se presionara la tecla ctl: http://stackoverflow.com/a/12592042/1017650 – Symmetric

Respuesta

20

Debido a todas las devoluciones de llamada de clase, usted no va a hacer mucho mejor que esto:

$(function() { 
     $("#selectable").selectable({ 
      selected: function (event, ui) { 
       if ($(ui.selected).hasClass('click-selected')) { 
        $(ui.selected).removeClass('ui-selected click-selected'); 

       } else { 
        $(ui.selected).addClass('click-selected'); 

       } 
      }, 
      unselected: function (event, ui) { 
       $(ui.unselected).removeClass('click-selected'); 
      } 
     }); 
    }); 
+2

Esta es una respuesta muy útil. ¿No está seguro de por qué no se ha marcado como la respuesta? Ciertamente funcionó para mí. –

+2

¿Esto disparará los eventos como es de esperar? Supongo que removeClass no disparará el evento de deselección. –

+0

Funciona para alternar un solo elemento. Sin embargo, elimina elementos múltiples ya seleccionados, por lo que no funciona para alternar varios elementos. – lubosdz

1

Ya tiene esa funcionalidad con jQuery UI seleccionable si mantiene presionada la tecla Ctrl mientras hace clic.

Si realmente lo necesita como la funcionalidad predeterminada, no necesita usar seleccionable, puede hacerlo simplemente como un simple controlador onclick, como lo que no se recomienda en la etiqueta.

O ... también podría editar jquery.ui.selectable.js y agregar una opción que hace justo lo que necesita. No debería ser demasiado difícil, hay 4 lugares donde evento.metaKey está marcado, asegúrese de que si su opción está configurada, simplemente ejecute los recorridos de código como si event.metaKey fuera siempre verdadero.

Como los elementos seleccionables podrían usar algo más de personalización, también podría hacer una solicitud de función para que los desarrolladores de la interfaz de usuario de jQuery la incluyan en la próxima versión oficial.

+0

Aunque estoy de acuerdo con que tiene la función en PC y dispositivos que tienen una tecla ctrl, NO tienes esa función cuando utilizas dispositivos táctiles, por lo tanto, es una muy buena idea y no es una duplicación, sino una adición o extensión. – Jobst

0

Usted tiene que inyectar dos elementos simples en el código para lograr lo que quiere. Esto solo invierte el metaKey booleano, siempre que necesite funcionalidad invertida/alternar.

options: { 
    appendTo: 'body', 
    autoRefresh: true, 
    distance: 0, 
    filter: '*', 
    tolerance: 'touch', 
    inverted: false /* <= FIRST*/ 
}, 

_mouseStart: function(event) { 
    var self = this; 

    this.opos = [event.pageX, event.pageY]; 

    if (this.options.disabled) 
     return; 

    var options = this.options; 

    if (options.inverted) /* <= SECOND*/ 
     event.metaKey = !event.metaKey; /* <= SECOND*/ 
Cuestiones relacionadas