2011-12-09 16 views
6

Il modulo jQgrid contiene diverse caselle di completamento automatico jQueryUI.come verificare se la casella a discesa Completamento automatico jqueryUI era aperta

Nel gestore di eventi keydown La chiave di Esc deve essere elaborata solo se la casella di riepilogo a discesa automatica non è aperta. Se il menu a tendina di completamento automatico è aperto, Esc premere shoult esegue solo l'azione predefinita (chiusura a discesa e annullamento della selezione).

Come verificare se il menu a discesa di completamento automatico è stato aperto? Può verificare se nel riquadro del documento è stata aperta una casella di completamento automatico.

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; 
        } 
       }); 
     } 
    }); 

Aggiornamento

ho cercato risposta Dr. Molle utilizzando

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; 

ma $. ('Ui-autocomplete.ui-widget. Visibile') lunghezza è 0 se esc viene premuto (è 1 se viene premuto un altro tasto e il menu a tendina è aperto). Sembra che causare cause Esc causa il comportamento di default del completamento automatico per prima cosa chiude il menu a discesa. Solo dopo questo il mio gestore è executud che non trova che il dropdown sia eseguito.

Come risolvere il problema?

risposta

0

di Andru è proprio sul. Se annulli la propogazione dell'evento dopo che il completamento automatico si chiude, squelches l'ESC

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

Non capisco questa risposta. Questo blocca la chiusura automatica del dropdown. Dovrei usare questo add close autocomplete manualmente nel metodo 'keydown.formEvent'? Quale codice dovrebbe essere usato per chiudere il menu a discesa? – Andrus

13

Usa:

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

..per controllare un completamento automatico specifica.

Per verificare se qualsiasi discesa è l'uso aperto: commento

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

Grazie. Nel dropdown del metodo keydown.formevent è già chiuso e la lunghezza è sempre 0, quindi questo controllo non trova che il menu a discesa è stato aperto. Ho aggiornato la domanda. come risolvere questo? – Andrus

+1

La domanda aggiornata suona come se fosse sufficiente per trovare l'ultimo menu a discesa aperto? Se sì, c'è un evento aperto per il completamento automatico. Tutto quello che devi fare è memorizzare il completamento automatico automatico/dropdown in una variabile quando l'evento open viene attivato. –

+0

Sembra no. Dobbiamo sapere se il menu a discesa è aperto o no se viene premuto Esc. Forse è possibile interrompere la propagazione della chiave esc se la chiave esc viene elaborata dal completamento automatico? Oppure è possibile prendere la pressione di esc key in precedenza, prima che il dropdown venga chiuso dal gestore di chiavi esc di autocomplete o forzare autocomple per chiudere il dropdown in keyup o qualche altra idea? – Andrus

Problemi correlati