jQuery触发器(clickEvent)与单击该项目的行为不同

时间:2017-05-05 22:08:54

标签: javascript jquery html5

我有一个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

得到有意义的回复,我就把它打开了

0 个答案:

没有答案