我有一个带有按钮的音板,可以在鼠标按下时触发 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
中检查鼠标右键并退出,而不是依靠另一个事件来取消其执行。
$(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/