如何在不使用onclick或onmousedown的情况下从锚点的href属性中停止事件传播

Squ*_*Cat 3 javascript anchor jquery event-propagation

由于限制,即使这是我完全避免的事情,在某种情况下我必须在achor标签的href属性中使用javascript:syntax.

(解释:在我的CMS中,我使用富文本编辑器允许用户对文本元素进行更改,包括链接.在某些情况下,需要特定的javascript:调用,并且我完全禁止从链接编辑功能上单击(以简化过程)但是,当其中一个链接出现在一个对onclick事件作出反应的块中时,该事件会发生双重攻击)

像这样:

<a href="javascript:doSomething()"></a>
Run Code Online (Sandbox Code Playgroud)

我的问题是这个链接在一个已经响应onclick事件的容器内.因此我想将事件对象传递给doSomething()方法,以便我可以使用jQuery

event.stopPropagation()
Run Code Online (Sandbox Code Playgroud)

方法.

然而不幸的是,似乎传递了事件对象

<a href="javascript:doSomething(event)"></a>
Run Code Online (Sandbox Code Playgroud)

似乎根本不起作用.Firefox将报告ReferenceError时不会说任何内容:未定义事件

我认为是这种情况,因为href =""不是脚本启动属性(例如onclick).问题是,在这种情况下,我将无法访问超出我已经做过的标签.

因此我要么需要

1.)从href属性中将事件对象传递给doSomething()函数的方法

要么

2.)通过其他方式在该锚点(在其点击之后)停止事件传播的方法.

感谢您的任何建设性意见!

Bro*_*ams 8

您无法停止该href属性的事件传播,因为:

  1. href代码执行时,它不是一个事件.它只执行该代码,类似于"位置黑客".就像进入javascript:doSomething()浏览器的地址栏一样.

  2. href代码事件触发链接执行- 包括冒泡.

    你可以在这个jsFiddle中看到这种行为.需要注意的是mouseup,mousedownclick所有的火都对链路,当链接被点击,前容器href代码执行.

如果有想要阻止的事件监听器,则必须找到另一种方法.


但是,如果您可以将javascript附加到文档,则可以阻止href使用preventDefault().

例如:


你可以在jsFiddle看到最后一个版本.