【发布时间】:2011-12-09 08:40:37
【问题描述】:
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').length 如果按下 esc 则为 0(如果按下其他键且下拉菜单打开则为 1)。 看起来导致 Esc 原因导致自动完成默认行为首先关闭下拉菜单。 只有在此之后,我的处理程序才被执行,它没有发现下拉菜单被执行。
如何解决这个问题?
【问题讨论】:
标签: javascript jquery jquery-ui jqgrid jquery-ui-autocomplete