我正在使用jquery来绑定链接上的一些点击事件。使用,以下代码我已经能够通过ajax更改链接的href - 但是当href更改并且我尝试单击链接时,没有任何反应。
想知道是否有人能发现我遗漏的明显错误。
$('a.shortlist_action').bind('click',function(){
item = $(this);
href = item.attr('href');
parent = $(this).parent('.shortlist_action_container');
item = $(this);
$.ajax({
url: $(this).attr('href'),
success: function(data) {
item.addClass('largeviewplannerbutton');
item.attr("href", '/myaccount/planner');
}
}
});
// stop event propagation here
return false;
});
谢谢。
答案 0 :(得分:1)
删除return false
,这会阻止事件传播,因为您的评论建议..
答案 1 :(得分:1)
// stop event propagation here
return false;
return false
会阻止传播和默认的bahviour。后者遵循<a href>
元素的超链接。你真的应该只在这里调用e.stopPropagation()
(并在函数签名中定义e
)。
答案 2 :(得分:1)
如前所述,jQuery事件处理程序中的return false
会阻止该事件的默认行为,当然,点击链接的默认行为是导航到链接href
中的URL
因此,使用当前代码,每次单击都会对当前href
中的URL进行Ajax调用,而不进行默认导航。即,首次单击该元素会对原始URL进行Ajax调用,然后更改URL。没有默认导航。然后第二次单击对 new URL进行Ajax调用,但同样没有默认导航。
如果想法只是第一次点击应该执行Ajax并更新href
,第二次和后续点击只会标准导航到新网址,那么您应该使用.one()
method而不是.bind()
。 .one()
方法绑定一个每个元素只运行一次的事件处理程序。
或者,您需要在函数内添加一些额外的逻辑来决定是否更改href
以及是否返回false
以取消默认点击行为。和/或可能添加对.off()
(或.unbind()
)的调用,以便在您不再需要特定链接时删除点击处理程序。