2011-12-09 10 views
6

El formulario jQgrid contiene varios cuadros de autocompletar jQueryUI.cómo comprobar si el cuadro desplegable autocompletar de jqueryUI estaba abierto

In keydown controlador de eventos La tecla de control de la tecla debe procesarse solo si el cuadro desplegable de autocompletar no está abierto. Si el menú desplegable de autocompletar está abierto, Esc presione shoult para realizar su acción predeterminada solamente (menú desplegable de cierre y cancelación de selección).

¿Cómo comprobar si se abrió el menú desplegable de autocompletar? Puede verificar si se abrió cualquier casilla de autocompletar en el cuerpo del documento.

jQuery.extend(jQuery.jgrid.edit, { 
    beforeShowForm: function ($form) { 
      var gridIdEncoded = $.jgrid.jqID($form[0].id.substring(8)); 
      $("#editmod" + gridIdEncoded).bind('keydown.formEvent', function (e) { 
       if (e.which === 27) { 
        // Todo: How invoke click only if any autocomplete dropdown is not opened 
        $("#TblGrid_" + gridIdEncoded + "_2 #cData").trigger("click"); 
        return false; 
        } 
       }); 
     } 
    }); 

actualización

me trataron respuesta Dr. Molle usando

if (e.which === 27) { 
    alert($('.ui-autocomplete.ui-widget:visible').length); 
    if ($('.ui-autocomplete.ui-widget:visible').length != 0) 
    // dropdown is open, allow default behaviour 
    return; 

pero $. ('Ui-autocomplete.ui en widgets:. Visible') de longitud es 0 si esc está presionado (es 1 si se pulsa otra tecla y el menú desplegable está abierto). Parece que causar causas de Esc autocompleta el comportamiento predeterminado primero con este menú desplegable. Solo después de esto, mi controlador se ejecuta y no encuentra que se ejecute el menú desplegable.

¿Cómo solucionar esto?

Respuesta

0

de Andru está justo en. Si cancela la propegación del evento después de que se cierra el autocompletado, silencia el ESC

$('.autocomplete').bind('autocompleteclose', function(event, ui) { 
return false; 
}); 
+0

No entiendo esta respuesta. Esto bloquea el cierre del menú desplegable de autocompletar. ¿Debo usar esto para agregar cerrar autocompletar manualmente en el método 'keydown.formEvent'? ¿Qué código debería usarse para cerrar el menú desplegable? – Andrus

13

Uso:

!!$($('autocompleteselector').autocomplete('widget')).is(':visible') 

..para comprobar un autocompletar específica.

para observar si alguno desplegable está abierta uso: comentario

!!$('.ui-autocomplete.ui-widget:visible').length 
+1

Gracias. En el menú desplegable del método keydown.formevent ya está cerrado y la longitud es 0 siempre, por lo que esta comprobación no detecta que se abrió el menú desplegable. Actualicé la pregunta Cómo arreglar esto ? – Andrus

+1

La pregunta actualizada suena como si fuera suficiente para encontrar el último menú desplegable abierto. En caso afirmativo, hay un evento abierto para autocompletar. Todo lo que tiene que hacer es almacenar el autocompletar activo/desplegable en una variable cuando el evento abierto se dispara. –

+0

Parece que no. Necesitamos saber si el menú desplegable está abierto o no si se presiona Esc. ¿Tal vez es posible detener la propagación de la clave esc si la clave esc se procesa por autocompletar? ¿O es posible capturar la tecla esc presionar antes, antes de que se cierre el menú desplegable mediante el controlador de la tecla esc autocompletar o forzar el autocompletar para cerrar el menú desplegable en la tecla o en alguna otra idea? – Andrus

Cuestiones relacionadas