全球的所有元素

问题描述:

进入功能我已经写了代码:全球的所有元素

$('*').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'); 
     } 
    }); 

这是对UI的按钮为输入事件的排斥。它不起作用。任何帮助,将不胜感激。感谢

编辑

注意,我所说的对话使用链接打开。我想知道当我点击回车时这个链接是否被集中,所以当我在消息对话框中输入时再次调用对话框。

+0

做出小提琴,它会更容易使用的小提琴 – 2014-12-08 09:04:36

为什么不使用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 
+0

显然没有努力解决。请看我的编辑谢谢 – Yaje 2014-12-08 09:02:36

可能是在处理程序注册时未创建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'); 
    } 
}); 
+0

显然不工作。请参阅我的编辑谢谢 – Yaje 2014-12-08 09:02:03

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

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

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

其中一个原因是此事件冒泡,可悲的是在所有浏览器中行为不同。

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

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

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

类似:

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