+ -
当前位置:首页 → 问答吧 → 请教jquery的事件方法为何能在ie,opera下间接触发a锚链接。

请教jquery的事件方法为何能在ie,opera下间接触发a锚链接。

时间:2010-05-26

来源:互联网

在ie和opera下。
点击绑定了jquery的click()方法的某元素,触发另一元素,并通过冒泡触发其父级锚链接A。
但在firefox和chrome等浏览器下却不会。

希望有研究过jquery源码的朋友,指出其中的关键。

有什么方法能够使firefox,chrome也能间接触发a链接呢?想不出来,请教了。
<!doctype html> <head> <meta charset="UTF-8" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> </head> <body > <a href="http://www.baidu.com#123"> <img id="apple" src="http://www.baidu.com/img/baidu_logo.gif" /> </a> <br /> <span onclick="try{$('#apple').click();}catch(e){alert('jquery还未加载,请刷新后重试')}">不点图片,点我</span> </body> </html>
 提示:您可以先修改部分代码再运行

作者: ONEBOYS   发布时间: 2010-05-26

<a>和<img>根本没有绑定事件,不存在冒泡之说
至于ie,opera 与 ff,chrome 的不同表现我个人认为也是对超链接内挂图片的默认行为处理方式不同
这里你想要冒,那就手动么 <a onclick="window.location='http://www.baidu.com#123'">
不过确实这样使用<a>意义就不大

作者: aolu11   发布时间: 2010-05-26

location是可以,但受某人影响,所以一开始不考虑location

至于事件传递,可以再看看下面。
<!doctype html> <head> <meta charset="UTF-8" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> </head> <body > <a href="//##xxx" onclick="alert(1)"> <img id="apple" src="http://www.baidu.com/img/baidu_logo.gif" /> </a> <br /> <span onclick="try{$('#apple').click();}catch(e){alert('jquery还未加载,请刷新后重试')}">不点图片,点我</span> </body> </html>
 提示:您可以先修改部分代码再运行
事件是随用户操作产生的,绑定的其实是事件函数,不管有没有函数与之绑定,事件是一定有的。这里span里的事件应该是传递到img以及a上去了。而在ie,opera下貌似还会主动触发一个新事件。——以上陋见,希望有人剥析下。感觉答案还得在jquery源代码里找啊。

作者: ONEBOYS   发布时间: 2010-05-27

事件当然是存在的,必然的啊,问题就是你1楼的代码没绑事件,那当然没反应,3#的绑了就有反应了,
你的误解就在于事件和默认行为:
能触发默认行为一定能触发相应事件
能触发相应事件不一定能触发默认行为
你把你3#代码在 FF 下跑一下,只有一次alert,并且没有跳转,也就是说仅仅是触发了一次事件
而IE的解释不一样,click()不但可以触发事件还会触发默认行为,因此不但alert两次同时还进行了跳转,

结论就是,你要是不想依靠事件而依靠<a><img/></a>的默认行为来跳转,那就是 IE only,要跨浏览器要用事件,个人观点,请指正

作者: aolu11   发布时间: 2010-05-27

主要是opera也掺和进来了。

那我就想着,firefox和chrome是不是也能实现呢。

作者: ONEBOYS   发布时间: 2010-05-27

相关阅读 更多