为选择器中的每个元素触发事件,只需触发一次

时间:2014-06-03 08:59:42

标签: javascript jquery html jquery-selectors mouseevent

我有:

$('#externalContactsGrid').on('mouseup', '.k-grid-content, tr', function(e) {
    alert('test')
...
})

如果鼠标在任一元素上,而不是两次,我希望它触发一次。所以我希望它在'.k-grid-content'或'tr'上启动,'tr'优先。

tr元素在.k-grid-content。


我还需要在e.which == 3时显示浏览器上下文菜单。

2 个答案:

答案 0 :(得分:1)

尝试使用 .stopPropagation() 停止事件冒泡

   $('#externalContactsGrid').on('mouseup', '.k-grid-content, tr', function(e) {
      e.stopPropagation();
      alert('test');
   });

答案 1 :(得分:0)

如果鼠标已启动,我希望它能触发一次

  1. 在我看来,你的警报要么两次
  2. 或者您只想将事件绑定一次
  3. 如果大小写为1,那么您可能希望使用.stopPropagation(),因为 tr元素位于.k-grid-content

    因为当事件绑定到任何子/孙元素时,事件往往会冒泡dom意味着事件会冒泡到它的父元素。所以如果父有任何绑定事件,那么也会被解雇。

    $('#externalContactsGrid').on('mouseup', '.k-grid-content, tr', function(e) {
       e.stopPropagation(); // stops the event to bubbleup the dom
       alert('test')
    

    如果案例为2,那么您可能想要使用.one()

    $('#externalContactsGrid').one('mouseup', '.k-grid-content, tr', function(e) {
    

    我还需要浏览器上下文菜单,以便在 e.which == 3 时不显示。

    为此:

    if(e.which == 3){
       $(document).off('contextmenu');
    }