我需要在链接上触发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');将不更改位置。
答案 0 :(得分:4)
enter code here
将我的笔记提取到其他帖子:(另一种说法相同的基本内容)
<a href="somewhere" id="mylink">MyLink</a>
<script>jQuery('#mylink').click(function(){
// do whatever I want here, then redirect
window.location.href = "http://stackoverflow.com";
});
function doClick(){
jQuery('#mylink').trigger('click');
};
// trigger the redirect now
doClick();
</script>
EDIT1:@ comments:
如果您描述的“其他”返回false,那么您在此时使用false终止回调 - 因此您是正确的但与此处理程序无关。哪一次点击首先执行,而另一次点击永远不会返回,如果它首先执行,则会在另一个点击日志之前重定向。
为了登录,你把它放在我的
"// do whatever I want here, then redirect"
评论 要删除其他事件,请仅与此绑定:
<a href="somewhere" id="mylink">MyLink</a>
<script>jQuery('#mylink').unbind('click').bind('click', function(){
// do whatever I want here, then redirect
window.location.href = "http://stackoverflow.com";
});
function doClick(){
jQuery('#mylink').trigger('click');
};
// trigger the redirect now
doClick();
答案 1 :(得分:1)
http://docs.jquery.com/Events/trigger#eventdata
$('a#my_special_link').trigger("click");
答案 2 :(得分:0)
“如果没有听众阻止了 默认情况下,更改位置。“
听起来正常链接的行为方式......?
无论如何,如果您正在尝试查找“return false”,则使用isDefaultPrevented()
将无法找到它,只有在从同一事件对象调用preventDefault()
时才会返回true。在这个例子中,我将事件对象发送到whatever()
,如果该函数设置preventDefault()
,那么窗口将重新定位(这是你需要的......?)
$('a#my_special_link').bind('click', function(e) {
whatever(e);
if (e.isDefaultPrevented()) {
window.location = $(e.target).attr('href');
}
});
答案 3 :(得分:0)
如果我正确理解了您的问题,那么您将拥有一个您无法控制的a
元素,该元素具有返回onclick
的{{1}}属性。从onclick处理程序返回false
可防止点击该链接将您带到链接页面。你不希望这样。
您可以存储false
处理函数,然后将其从link元素中删除:
onclick
然后在自定义单击处理程序中调用存储的处理函数:
var $a = $('#my_special_link');
var onclickHandler = $a.attr('onclick');
$a.removeAttr('onclick');