防止以前在mousedown上定义的事件只用于右键单击

prevent previously defined events on mousedown for right-click only

本文关键字:事件 只用于 右键 单击 定义 mousedown      更新时间:2023-09-26

我有一个响板,上面有一些按钮,可以在鼠标按下时触发AJAX帖子。

理想的功能是用鼠标左键播放音频,用鼠标右键取消播放。

到目前为止,我的代码禁用了上下文菜单并取消了播放。。。但是,如果他们右键单击时在按钮上(这会触发其他先前定义的事件),它仍然会按下鼠标并播放该音频。

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

我试图禁用鼠标右键来触发之前定义的事件,但要遵守Cancel_Playback。有什么想法吗?

编辑更新了标题和描述,以更准确地反映我正在努力实现的目标。这也应该有助于:http://jsfiddle.net/g9sh1dme/15/

stopImmediatePropagation可能就是您要查找的函数。

它取消了绑定到同一元素的所有其他事件以及DOM中更高级别的任何其他委托。顺序也很重要,因为事件是按绑定顺序调用的。您只能取消在执行取消操作的事件之后绑定的事件。

我不确定这些更改是否能保持程序的有效性,但它展示了函数的用途。否则,我只需要在Play_Sound中检查鼠标右键并退出,而不是指望另一个事件取消执行。

实时演示

$(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")
}