我正在编写一个JavaScript应用程序并遇到问题,在firefox上大约有5-10%的鼠标点击自定义按钮会被忽略。
用于设置点击处理程序的原型是
function Button(parent, styleClassName) {
Element.call(this, parent, "div");
this.setStyleClass(styleClassName);
}
Button.prototype = Object.create(Element.prototype);
Button.prototype.constructor = Button;
Button.prototype.setOnClick = function(handler) {
this.domNode.handler = handler;
// sporadically skipped
this.domNode.onclick = function(event) {
console.log("ocl: " + event.currentTarget.id);
this.handler(event);
if(event.preventDefault) event.preventDefault();
event.stopPropagation();
}
this.domNode.ontouchstart = function(event) {
console.log("ots: " + event.currentTarget.id);
this.handler(event);
if(event.preventDefault) event.preventDefault();
event.stopPropagation();
}
}
受影响的html元素的示例(事件处理程序正确分配给外部div):
<div style="position: absolute; overflow: hidden; visibility: visible; left: 291px; top: 4px; width: 34px; height: 34px;" id="LandscapeScreen0_pMain_dlg_Element0_btnCloseDialog">
<svg style="position: absolute; overflow: hidden; visibility: visible; width: 32px; height: 32px; cursor: pointer;" id="LandscapeScreen0_pMain_dlg_Element0_btnCloseDialog_RefSVG0">
<use href="#svg08"/>
</svg>
</div>
其他一些信息:
关于最后一点:我添加了这些行进行调试:
window.onclick=function(e){console.log("onclick0");};
window.addEventListener("click",function(e){console.log("onclick1");}, true);
window.addEventListener("click",function(e){console.log("onclick2");}, false);
每当按钮不检索鼠标事件时,窗口甚至都不会收到其中一个事件。所以不知何故,这些事件必须全局放弃!?
所以我需要的是提示这可能是导致这种行为的原因......当事件被跳过而不是时,它似乎是非确定性的。
感谢您的帮助!