我需要触发链接上的click事件,然后,如果没有侦听器阻止默认设置,则更改位置。
这是我目前得到的
var $el = $('a#my_special_link');
var onClick = $el.attr('onclick');
// Hack to capture the event object
var ev_reference;
var ev_capture = function(ev) { ev_reference = ev; }
$el.bind('click', ev_capture);
// Don't leave out the onClick handler
if ( typeof onClick == 'function' )
$el.bind('click', onClick);
$el.trigger('click');
// Clean up
$el.unbind('click', ev_capture);
if ( typeof onClick == 'function' )
$el.unbind('click', onClick);
// Redirect if necessary
if ( ! ev_reference.isDefaultPrevented() )
window.location = $el.attr('href');
欢迎提出任何改进建议。
**PS:**是的,这只是一个普通的链接如何工作,除了你可以做一些其他的处理之间。
**PPS:**不,仅执行$el.trigger('click');
将 * 不会 * 更改位置。
4条答案
按热度按时间qco9c6ql1#
enter code here
要将我的笔记提取到其他帖子:(同样基本的东西的另一种说法)编辑1:@评论:
如果你所描述的“其他”返回false,你就用false终止回调--所以你是正确的,但与这个处理程序无关。哪个先命中就执行,另一个永远不会返回,如果它先执行,这个就在另一个命中之前重定向。
为了把你的日志放进去,你把它放在我的
comment要删除另一个事件,然后只与此事件绑定:
jtoj6r0c2#
http://docs.jquery.com/Events/trigger#eventdata
wribegjk3#
如果没有侦听器阻止默认值,请更改位置。
听起来就像一个正常的链接行为...?
无论如何,如果你试图寻找“return false”,使用
isDefaultPrevented()
是找不到的,只有当preventDefault()
从同一个事件对象调用时才会返回true。在这个例子中,我将事件对象发送到whatever()
,如果那个函数设置了preventDefault()
,窗口无论如何都会重新定位(这是你需要的吗?)vh0rcniy4#
如果我没理解错你的问题,你有一个你无法控制的
a
元素,它有一个onclick
属性返回false
,从onclick处理程序返回false
会阻止你点击链接到链接页面,你不希望这样。您可以存储
onclick
处理程序函数,然后将其从link元素中删除:然后在自定义单击处理程序中调用存储的处理程序函数: