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.)通过其他方式在该锚点(在其点击之后)停止事件传播的方法.
感谢您的任何建设性意见!
您无法停止该href属性的事件传播,因为:
当href代码执行时,它不是一个事件.它只执行该代码,类似于"位置黑客".就像进入javascript:doSomething()浏览器的地址栏一样.
href代码在事件触发链接后执行- 包括冒泡.
你可以在这个jsFiddle中看到这种行为.需要注意的是mouseup,mousedown和click所有的火都对链路,当链接被点击,前容器href代码执行.
如果有想要阻止的事件监听器,则必须找到另一种方法.
但是,如果您可以将javascript附加到文档,则可以阻止href使用preventDefault().
例如:
jQuery,1.7版之前:
$("#container a").bind ("mousedown mouseup click", function (e) {
e.preventDefault();
} );
Run Code Online (Sandbox Code Playgroud)jQuery 1.7及更高版本:
$("#container a").on ("mousedown mouseup click", function (e) {
e.preventDefault();
} );
Run Code Online (Sandbox Code Playgroud)
或更好):
$("#container").on ("mousedown mouseup click", "a", function (e) {
e.preventDefault();
} );
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
10947 次 |
| 最近记录: |