javascript – 如何在不使用onclick或onmousedown的情况下从锚点的href属性中停止事件传播
作者:互联网
由于限制,即使这是我完全避免的事情,在某种情况下我必须在achor标签的href属性中使用javascript:syntax.
(解释:在我的CMS中,我使用富文本编辑器允许用户对文本元素进行更改,包括链接.在某些情况下,特定的javascript:调用是必需的,并且我禁止完全从链接编辑功能中点击(以简化过程)但是,当其中一个链接出现在一个对onclick事件作出反应的块中时,该事物会发生双重攻击)
像这样:
<a href="javascript:doSomething()"></a>
我的问题是这个链接在一个已经响应onclick事件的容器内.因此我想将事件对象传递给doSomething()方法,以便我可以使用jQuery
event.stopPropagation()
方法.
然而不幸的是,似乎传递了事件对象
<a href="javascript:doSomething(event)"></a>
似乎根本不起作用. Firefox将报告ReferenceError时不会说任何内容:未定义事件
我认为是这种情况,因为href =“”不是脚本启动属性(例如onclick).问题是,在这种情况下,我将无法访问超出我已经做过的标签.
因此我要么需要
1.)从href属性中将事件对象传递给doSomething()函数的方法
要么
2.)通过其他方式在该锚点(在其点击之后)停止事件传播的方法.
感谢您的任何建设性意见!
解决方法:
您无法从href属性停止事件传播,因为:
>当href代码执行时,它不是一个事件.它只执行该代码,类似于“位置黑客”.就像在浏览器的地址栏中输入javascript:doSomething()一样.
> href代码在事件触发链接后执行 – 包括冒泡.
您可以在this jsFiddle中看到该行为.请注意,在执行href代码之前,单击链接时,mouseup,mousedown和click都会为链接和容器触发.
如果有想要阻止的事件监听器,则必须找到另一种方法.
但是,如果您可以将javascript附加到文档,则可以使用preventDefault()来阻止href.
例如:
> jQuery,1.7版之前:
$("#container a").bind ("mousedown mouseup click", function (e) {
e.preventDefault();
} );
> jQuery 1.7及更高版本:
$("#container a").on ("mousedown mouseup click", function (e) {
e.preventDefault();
} );
或更好):
$("#container").on ("mousedown mouseup click", "a", function (e) {
e.preventDefault();
} );
你可以see this last version live at jsFiddle.
标签:jquery,javascript,anchor,event-propagation 来源: https://codeday.me/bug/20190718/1494579.html