我有一个HTML5 canvas元素,用户可以与之交互,它有一个onclick处理程序,它只捕获事件并将其停止,如下所示:
this.canvas.onclick = function(e){
$("#mycanvas")[0].focus();
e.stopPropagation();
e.bubbles = false;
};
我在文档上有一个onclick处理程序,如下所示:
document.onclick = function(e){
//do something I only want done when the canvas is NOT clicked
}
当我单击画布时,正如预期的那样document.onclick
处理程序未被触发。但是,我还需要能够以编程方式触发单击,为此我使用的是jQuery:
$("#mycanvas").trigger($.Event(savedClickEvent));
当此代码运行时,会触发document.onclick
处理程序。通过查看jQuery.trigger
代码,似乎不仅需要stopPropagation()
,还需要preventDefault()
。
为什么点击preventDefault()
和触发器的要求之间存在差异?这是我需要解决的jQuery中的错误,还是我应该在没有stopPropagation()
的情况下调用preventDefault()
- 我对这两个函数的理解是他们做了相同的事情。
加分问题:为什么$("#mycanvas")[0].click
会返回function(){[native code]}
?我怀疑这是导致问题的原因。
编辑:
似乎jQuery不支持内联事件处理程序。使用addEventListener修复了click
的问题,但没有解决mouseup
的问题 - 我最后通过不使用jQuery来解决这个问题,而是使用了document.getElementById("mycanvas").dispatchEvent(savedEvent)
。如果我对错误报告(https://github.com/jquery/jquery/issues/3660#issuecomment-299667529)