如何检查jqueryUI自动完成下拉框是否已打开

时间:2011-12-09 08:40:38

标签: javascript jquery jquery-ui jqgrid jquery-ui-autocomplete

jQgrid表单包含几个jQueryUI自动完成框。

在keydown事件处理程序中,只有在未打开自动完成下拉框时才需要处理Esc键按下。如果自动完成下拉列表打开,则Esc按下仅执行默认操作(关闭下拉列表并取消选择)。

如何检查是否已打开自动完成下拉列表? 它可以检查文档正文中是否打开了任何自动完成框。

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

更新

我尝试使用

来回答Molle博士的回答
 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;

但$('。ui-autocomplete.ui-widget:visible')。如果按下esc,则长度为0(如果按下其他键并且下拉列表打开则为1)。 它看起来像导致Esc导致自动完成默认行为首先wthis关闭下拉列表。 只有在此之后,我的处理程序才是executud,它没有找到执行下拉列表。

如何解决这个问题?

2 个答案:

答案 0 :(得分:13)

使用:

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

..检查特定的自动填充。

要检查是否有任何下拉列表,请使用:

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

答案 1 :(得分:0)

Andrus的评论是正确的。如果在自动完成关闭后取消事件的传播,则会压缩ESC

$('.autocomplete').bind('autocompleteclose', function(event, ui) {
return false;
});
相关问题