繁体   English   中英

Javascript:停止onClick默认

[英]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/227299https://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM