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

前端之家收集整理的这篇文章主要介绍了javascript – 如何检查jqueryUI自动完成下拉框是否已打开前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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,它没有找到执行下拉列表.

如何修复这个?

解决方法

安德鲁的评论是正确的.如果在自动完成关闭后取消事件的激活,则会压缩ESC
$('.autocomplete').bind('autocompleteclose',function(event,ui) {
return false;
});

猜你在找的jQuery相关文章