javascript - 防止先前定义的鼠标按下事件仅用于右键单击

标签 javascript jquery preventdefault mousedown

我有一个带有按钮的音板,可以在鼠标按下时触发 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。有什么想法吗?

编辑 更新了标题和描述,以更准确地反射(reflect)我想要完成的任务。这也应该有帮助:http://jsfiddle.net/g9sh1dme/15/

最佳答案

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

它会取消绑定(bind)到同一元素的所有其他事件以及 DOM 中更高层的任何其他委托(delegate)。顺序也很重要,因为事件是按照它们绑定(bind)的顺序调用的。您只能取消在取消事件之后绑定(bind)的事件。

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

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

关于javascript - 防止先前定义的鼠标按下事件仅用于右键单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25754957/

相关文章:

javascript - 有没有办法等待加载网站的 dom(不是完整的网页)?

javascript - 如何将多个 date1 即(10/12/2016)、date2 即(23/12/2016)传递到 django 中的url?

javascript - 从ajax延迟响应中获取jsonObject

javascript - 如何阻止机器人使用 .submit() 绕过我的 'required' 字段?

javascript - 当我通过断点或通过 console.warn 打印时,类的属性显示不同

javascript - 获取其自己窗口内的骰子总数。并不是所有的 window

javascript - 更改控制组事件按钮主题

Javascript:为什么这里使用preventDefault?

javascript - 无法阻止 mac 上最新 Chrome 版本 (59) 中的导航手势

javascript - 当我尝试将鼠标悬停在其关闭的第二个子元素上时 - Jquery 或 css 问题?