我有一个文本框和一个 Jquery UI 对话框。当用户在文本框中完成输入并按 Enter 后,我想显示对话框。为了实现这一点,我使用以下代码:
$(document).ready(function () {
var helpDial = $('#helpDialog');
var input = $('#helpSearch');
helpDial.dialog({
width: 800,
autoOpen: false,
modal: true,
title: "Templates",
position: [165, 158]
});
input.focusin(function () {
helpDial.dialog('close');
}).focusout(function () {
helpDial.dialog('open');
}).on('keypress', function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code == 13) {
input.focusout();
return false;
}
});
});
<input id="helpSearch" />
<div id="helpDialog"></div>
问题是,当我按 Enter 时,focusout
会调用两次,一次是在事件处理程序中input.focusout()
,第二次是helpDial.dialog('open')
在focusout
事件处理程序之后。这会导致创建两个背景叠加层,当我关闭对话框时,一个叠加层仍然可见。
我究竟做错了什么?有没有更好的方法来处理这种情况——“在文本字段中按下输入会打开一个 jQuery 对话框”。谢谢。