jQuery UI 模式对话框 : Prevent keypressed when dialog is open

标签 jquery jquery-ui event-handling modal-dialog jquery-ui-dialog

我正在使用 jquery-ui 模态,我的应用程序使用几个绑定(bind)到模态对话框的热键。

这是我的工作 jsfiddle example和代码:

$(document).keypress(function(e){console.log("pressed a key: " + e.which);})
var dialog = $('#modal-dialog')
    .dialog({ modal: true, autoOpen: false, buttons: [{text:"ok"}] });
    .keypress(function(e){console.log("cought!"); e.stopPropagation()})
$("#bt").click(function(){dialog.dialog("open")})

当模式对话框打开时,它应该抑制按键事件从 Dom 树向上传输到文档/窗口。 当输入元素具有焦点(不适用于按钮)时,stopPropagation 就会启动。 否则,事件将被传播。

解决这个问题的最佳方法是什么?

最佳答案

当对话框打开时,您可以取消绑定(bind) $(document).keypress 事件,然后再次绑定(bind) $(document).keypress 当对话框关闭时。

这是DEMO

js代码:

function bind_event()
{
    $(document).keypress(function(e){console.log("pressed a key: " + e.which);});
}
function unbind_event()
{
    $(document).unbind('keypress');
}
$(document).ready(function(){
    bind_event();

var dialog = $('#modal-dialog')
    .dialog({ 
        modal: true, autoOpen: false, buttons: [{text:"ok"}],
        open: function( event, ui ) {
            unbind_event();
            /*$(document).keypress(function(e){
                console.log('dialog open '+e.which);
            });*/
        },
        close: function( event, ui ) {
            bind_event();
        }
    })
    .keypress(function(e){
        console.log("cought!"); 
        e.stopPropagation()
    })
$("#bt").click(function(){dialog.dialog("open")});
});

关于jQuery UI 模式对话框 : Prevent keypressed when dialog is open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24942336/

相关文章:

javascript - 在 jquery-ui 自动完成中处理来自自定义源的数据

jquery - 使用 jQuery UI 1.8.2 进行可排序 + 嵌套列表

java - TransactionEventHandler 在 Node.setProperty() 上给出 javax.transaction.SystemException

javascript - jQuery 的事件处理程序工作得很好,但不应该,因为它不在 read() 函数中

javascript - JQuery 类交换未按预期运行

javascript - 将javascript中的简单分页转换为jquery代码

javascript - 轻扫面漆侧菜单

javascript - jQuery 用户界面 : How to pass values to dialog

javascript - jQuery - 我怎样才能让这个触发器工作,这样我的值就是100?

spring - 在 Spring 中使用 @Async 的 @EventListener