停止从jQuery对话框输入关键事件传播

时间:2013-06-27 19:08:25

标签: jquery events dialog propagation

前言:我是一名经验丰富的程序员,但在html,javascript和jQuery方面都是新手。那就是说,我真的爱上了jQuery。它与我在25年多的编程中遇到过的任何东西一样接近诗歌。

无论如何,这是我的问题:

我有一个页面,我正在实现一个jQuery模式对话框,作为提交表单的“确认”提示。用户单击按钮或只需按ENTER即可发生这种情况。在任何一种情况下,它都会正确显示确认对话框,并将焦点放在“更新”按钮上。只要我用鼠标点击按钮,一切正常。但是当我按下ENTER键(为了激活对焦按钮上的“click”事件)时,ENTER键事件最终会传播到表单,然后再次重新显示“Confirm”提示。我知道在对话框关闭后我需要停止传播Enter键事件,但我似乎无法弄清楚如何去做。谁能开导我?

谢谢...

编辑添加:我试过添加“return false;”在调用之后立即关闭我的事件处理程序中的对话框,但这并没有解决问题:

/*================================== 
 * Confirm Update Dialog Definition
 *==================================*/
    $('#confirmUpdate').dialog({
        autoOpen: false,
        title: "Confirm Update",
        closeText: "Cancel update request.",
        modal: true,
        resizable: false,
        width: 500,
        buttons: 
            [{
        text: "Cancel",
            click: function() {
                $(this).dialog("close");
                return false;
                } 
            }, 
            { 
            text: "Update",
            click: function() {
                submitRequest('SUBMIT');
                $(this).dialog("close");
                return false;
                }
            }], // End buttons
        open: function() { // Set focus on "Update" button
         $(this).siblings('.ui-dialog-buttonpane').find('button:eq(1)').focus(); 
        } 
    }); 

以下是显示对话框的功能:

/*=================================
 * confirmUpdate -- Confirm Update
 *=================================*/
function confirmUpdate() {
    var sName = document.getElementById('sName').value;
    document.getElementById('confirmUpdateText').innerHTML = 'Submit changes to course requests for: <b>' + sName + '</b>?';
    $("#confirmUpdate").dialog("open");
} 

另外奇怪的是,我在第一个调用对话框的javascript函数中停止传播ENTER键事件:

/*========================================
 * pressedKey -- Process Valid Key Events
 *========================================*/
function pressedKey(keyEvent) {

 // Set key value
    keyEvent = keyEvent || window.event;
    var key = keyEvent.keyCode || keyEvent.which;

 // If anything but ENTER ==> return
    if (key !== ENTER) {
        return;
        }
    else {
        confirmUpdate();
        return (key !== ENTER);
        }
}

0 个答案:

没有答案