按下Enter键时,jquery UI对话框有多个实例

时间:2012-07-13 18:54:29

标签: javascript jquery jquery-ui

有类似的问题,但他们无法帮助我解决这个问题。

当对话框打开并按Enter键时,我希望这相当于关闭对话框。

我写了以下内容但它不起作用。相反,在每个ENTER处,焦点都停留在触发对话框打开的元素上,从而产生多个实例。

由于

var $dialogError = $('<div id="dialogError"></div>').html(vGraph.getLastErrorMsg()).dialog({
    autoOpen: false,
    open: function() {
        $("#dialogError").keydown(function(e) {
            alert("enter");
            if (e.keyCode == $.ui.keyCode.ENTER) {
                $(this).dialog("close");
            }
        });
    },
    title: 'Error'
});
$dialogError.dialog('open');​

3 个答案:

答案 0 :(得分:2)

打开对话框后,可能会使用$('#dialogError').focus();将焦点设置到dialogError元素,这样焦点就不再位于打开对话框的元素上,而是会捕获回车键。

答案 1 :(得分:1)

$(document).on('keypress', function(event) {
    if (event.keyCode == $.ui.keyCode.ENTER) {
        $('#dialogError').dialog('close');    
    }
});​

无论对话框是否具有焦点,这都可以使用,这可能是你想要的。该对话框未打开时将执行此代码,但运行$('#dialogError').dialog('close');将不会产生任何不利影响。

示例 - http://jsfiddle.net/tj_vantoll/x32zC/1

答案 2 :(得分:0)

尝试从false处理程序返回keydown

open: function() {
    $("#dialogError").keydown(function(e) {
        alert("enter");
        if (e.keyCode == $.ui.keyCode.ENTER) {
            $(this).dialog("close"); 
            return false;
        }
    });
},