防止mousedown上先前定义的事件仅用于右键单击

时间:2014-09-09 23:15:17

标签: javascript jquery preventdefault mousedown

我有一个带按钮的音板,可以在mousedown上触发AJAX帖子。

理想的功能是在左侧mousedown播放音频并在右侧mousedown取消播放。

到目前为止我的代码禁用了上下文菜单并取消了播放...但是,如果它们在右键单击时触发了一个按钮(触发其他先前定义的事件),它仍将遵循mousedown和play那个音频。

$(document).ready(function(){ 
  document.oncontextmenu = function() {return false;};
  $(document).mousedown(function(e){ 
    if( e.which == 3 ) {
        e.preventDefault();
        Cancel_Playback();
      return false; 
    } 
    return true; 
  }); 
});

我正在尝试禁用右侧mousedown来触发先前定义的事件但是尊重Cancel_Playback。有什么想法吗?

修改 更新标题和说明以更准确地反映我想要完成的内容。这也应该有所帮助:http://jsfiddle.net/g9sh1dme/15/

1 个答案:

答案 0 :(得分:1)

stopImmediatePropagation可能是您正在寻找的功能。

它取消绑定到同一元素的所有其他事件以及DOM中更高的任何其他代理。顺序也很重要,因为事件按照它们被绑定的顺序被调用。您只能取消在取消事件后绑定的事件。

我不确定这些更改是否能保持程序的有效性,但它会证明该功能的使用。否则,我只是检查Play_Sound中的右侧mousedown并退出,而不是依赖另一个事件来取消其执行。

Live Demo

$(document).ready(function(){ 
  document.oncontextmenu = function() {return false;};
  //For this to work you must bind to the same object or you must bind to something lower in the DOM.
  $(".sound").mousedown(function(e){ 
    if( event.which == 3 ) {
        Cancel_Playback();
        e.stopImmediatePropagation();
        return false; 
    } 
    return true; 
  }).mousedown(Play_Sound);
})

function Cancel_Playback() {
    alert("This is all that should be displayed on right-mousedown")
}

function Play_Sound() {
    alert("Display this on left-mousedown... but not on right-mousedown")
}