全局输入所有元素的功能

时间:2014-12-08 08:52:13

标签: javascript jquery enter onkeyup

我写了一段代码:

$('*').on('keyup',function(e){
    if(e.keyCode == 13){
          $(this).trigger('click');
    } 
});

上面的代码正常工作,直到jquery对话框。显然,只要我在对话框中按下回车键。这有点像事件的泡沫。

我有2个对话框。第一个是确认对话框,第二个是消息对话框。当我点击是时会弹出消息对话框,当我在消息对话框中点击确定时,确认对话框将再次打开。

我试过这样:

 $('*').not('.ui-button').on('keyup',function(e){
        if(e.keyCode == 13){
              $(this).trigger('click');
        } 
    });

这是为了排除enter事件的ui按钮。那没起效。任何帮助,将不胜感激。感谢

编辑

请注意,我使用链接调用对话框。我想知道当我点击输入时该链接是否聚焦,所以当我在消息对话框中按Enter键时它再次调用对话框。

5 个答案:

答案 0 :(得分:0)

为什么不使用off取消活动?

$('*').on('keyup',function(e){
    if(e.keyCode == 13){
          $(this).trigger('click');
    } 
}).find(".ui-buttons").off('keyup'); // this unbinds the event so it won't trigger

答案 1 :(得分:0)

注册处理程序时可能不会创建ui按钮。

您可以做的一种方法是将单个处理程序注册到文档对象,然后查看实际目标是否为ui-button

$(document).on('keyup', function (e) {
    var $target = $(e.target);
    if ($target.closest('.ui-button').length) {
        return;
    }
    if (e.keyCode == 13) {
        $target.trigger('click');
    }
});

答案 2 :(得分:0)

使用此代码,此代码排除.ui-button元素和.ui-button类的内部元素

$('body').on('keyup',function(e){
     if(!$(e.target).closest('.ui-button').length && e.keyCode == 13){
           $(e.target).trigger('click');
      } 
});

答案 3 :(得分:0)

我承认我不是全球绑定的忠实粉丝,特别是因为这些问题。我发现最好指定我想要将事件绑定到的元素的类型和/或位置。

其中一个原因是这个事件冒泡,在所有浏览器中表现不一样。

我的建议是仅将事件绑定到所需的元素,并将e.stopPropagation()添加到被调用的函数中。

我知道这不是你要找的答案,但我相信你应该考虑这种方法更具体(更可靠)。

答案 4 :(得分:0)

我通过模糊我点击以打开对话框的链接来解决问题。

类似的东西:

$('.links').find('a').on('click',function(){
     $(this).blur();
});