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.

上一篇:javascript – 如何将p放入标签内


下一篇:href = javascript:jquery在FF中不起作用