2011-02-27 9 views
5

En mi caso, tengo una UL con el plugin JQuery UI Selectable aplicado, pero al mismo tiempo, quiero que el artículo que la bruja estaba encuadernado con selectable plugin estaba haciendo algo cuando I double click este artículo. Pero parece que el JQuery UI Selectable plugin had block the dblclick event. Entonces, ¿cómo puedo hacer que funcione?Cómo habilitar el evento dblclick en los elementos que se vinculó con el plugin JQuery UI seleccionable?

por ejemplo:

<script> 
    $(function() { 
     $("#selectable").selectable(); 

       $("#selectable").dblclick(function(){ 
        // do something here 
       }) 
    }); 
    </script> 

<ul id="selectable"> 
    <li class="ui-widget-content">Item 1</li> 
    <li class="ui-widget-content">Item 2</li> 
    <li class="ui-widget-content">Item 3</li> 
    <li class="ui-widget-content">Item 4</li> 
    <li class="ui-widget-content">Item 5</li> 
    <li class="ui-widget-content">Item 6</li> 
    <li class="ui-widget-content">Item 7</li> 
</ul> 

Muchas gracias !!

+0

Nunca podrá hacer que una página funcione bien cuando los elementos intenten manejar un solo clic y doble clic. El código será demasiado complicado, los navegadores no cooperan y los usuarios lo odiarán. – Pointy

Respuesta

-6

En jQuery puede vincular eventos, así:

$("#selectable").selectable().dblclick(); 

Bit No estoy seguro de que esto va a funcionar, porque ambos eventos son eventos de clic.

+2

Esto no es "eventos de enlace". Simplemente llama a dos funciones, una después de la otra. Se llama "encadenamiento" y no tiene nada que ver con los eventos. –

3
$("#selectable li").mousedown(function(event) { 
    if(event.which==1) 
    { 
     if($(event.currentTarget).data('oneclck')==1) 
     { 
      alert('click'); 

      return false; 
     } 
     else 
     { 
      $(this).data('oneclck', 1); 
      setTimeout(function(){ 
       $(event.currentTarget).data('oneclck', 0); 
      }, 200); 
     } 
    } 
}); 
+0

pregunta por solución ... – misima

16

Si agrega .ui-seleccionado cancelar opciones introducidas en el método de selección a continuación, puede hacer doble clic en b/c que no elevará caso de seleccionar los elementos seleccionados .ui.

$('#selectable').selectable({ 
    cancel: '.ui-selected' 
}); 

Aunque, esto elimina la posibilidad de anular la selección de un elemento seleccionado. Puede hacer lo siguiente para anular la selección manualmente

$('.ui-selected').on('click', function() { 
    $(this) 
    .removeClass('ui-selected') 
    .parents('.ui-selectable') 
    .trigger('selectablestop'); 

    // you might also want to trigger selectablestop. 
}); 
+1

Creo que ahora con 1.7, el método on() para enlazar eventos debería usarse para el clic .ui-selected, para que puedan hacerse "delegados" lo que significa que los elementos ganan y pierden la clase .ui-selected, automáticamente ganan y pierden el controlador de eventos.Eso se vería así: $ ('# seleccionable'). On ('clic', '.ui-selected', función() {... –

+0

Actualizó la respuesta usando el método .on. Gracias Michael –

0

Esto es porque onMouseDown desencadena evento de selección (el div de puntos que selecciona varios elementos seleccionables.) Que tenía el mismo problema y i fijo mediante la adición de unas pocas líneas de código a la Biblioteca JQUERY UI. Lo que tienes que hacer es retrasar el evento de selección empezando después de que el mouse se mueva unos pocos píxeles. Esto le permite hacer doble clic en el elemento y aún así tener la selección que es fácil de usar. : D

Ésta es la parte del código que retrasa la selección y resuelve su problema:

<script> 
    var content = $('#content').selectable(); 

    var _mouseStart = content.data('selectable')['_mouseStart']; 

    content.data('selectable')['_mouseStart'] = function(e) { 
     _mouseStart.call(this, e); 
     this.helper.css({ 
      "top": -1, 
      "left": -1 
     }); 
    }; 
</script> 

he encontrado esta solución en este post

0

utilizo esto y yo creo que es la mejor solución .

$("ul").selectable({ 
    filter: "li" 
}); 

$("ul").on("mousedown","li",function(e){ 
    var n = ($(e.toElement).is(".ui-selected")) ? 1 : 0; 
    $("#filelist").selectable("option", "distance", n); 
}); 

Cuando el usuario inicia un clic en una serie de elementos seleccionados que establecer el distance a uno para que el no bloquea el evento de doble clic, pero que está disponible si el usuario realmente comienza la selección.

Cuestiones relacionadas