[英]Javascript: Stop onClick default
我感到自己缺少明显的东西,但可以看到。
设置了click事件的触发器:
anchor.addEventListener("click", myClickEvent ); function myClickEvent() { this.preventDefault(); // fails return false; }
但是,默认的onClick方法仍然会发生。
我可以在添加事件监听器的同时取消默认传播,还是可以使用其他方法来取消传播。 我无法在myClickEvent中使用.preventDefault(),因为该事件当时不可用。
为了清楚起见,请编辑以下注释:即使myClickEvent返回false,也会发生标记的默认onClick。
从使用addEventListener
注册的处理程序返回false不会执行任何操作。 参见https://stackoverflow.com/a/1357151/227299和https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault
推荐的方法是调用event.preventDefault()
function myClickEvent(e) {
e.preventDefault()
}
来自HTML属性的处理程序仍然有效,但是您不应该使用它,因为与event.preventDefault()
(不允许遵循链接)和event.stopPropagation()
(不要让它return false
event.preventDefault()
相比, return false
含义还不清楚事件冒泡了)
element.addEventListener("click", myClickEvent );
function myClickEvent(event) {
event.preventDefault();
return false;
}
全局范围中没有名为preventDefault
此类函数-您需要使用已传递到回调中的事件。
还请确保您在事件附加的东西,可以点击(一种形式,锚,按钮等), 可以潜在地具有一个事件阻止。
如果将事件附加到子元素/父元素,则将无法按预期工作。
几乎在这里感谢Teemu的代码,但不完全是。
根据调用函数的方式而有所不同。 似乎既发送了定义'this'值的隐藏参数,又调用了不带参数的自动事件对象作为第一个可见参数:
不带参数调用它:
anchor.addEventListener("click", myClickEvent ); function myClickEvent(param1, param2) { // this = events parent element (<a>) // this.href = <a href=...> // param1 = event object // param2 = undefined oEvent = param1; oEvent.preventDefault(); }
但是然后使用参数调用它:
anchor.addEventListener("click", function (oEvent) { myClickEvent(oEvent, myParameter); }); function myClickEvent(param1, param2) { // this = [object Window] // this.href = undefined // param1 = event object // param2 = myParameter oEvent = param1; oEvent.preventDefault(); }
请注意,当手动发送参数时,“ this”的值从事件父元素变为“ [object Window]”,从而导致this.href出错。
但是,preventDefault现在似乎可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.