2012-11-15 79 views
0

我正在使用jquery绑定链接上的一些点击事件。使用下面的代码,我可以通过ajax改变链接的href - 但是当href改变时,我尝试点击链接,没有任何反应。通过Ajax更改jQuery中的链接

想知道是否有人可以发现我失踪的明显错误。

$('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

没有答案,只是一些笔记。你有'item = $(this);'两次,你可能想使用'url:href'而不是'url:$(this).attr(href)'。 – yoozer8

+0

第一次点击链接会执行Ajax并更改href,然后第二次和随后的点击实际上会导航到新的URL,而无需进一步的Ajax?这对用户来说不是有点混淆吗? – nnnnnn

+0

嗨,人们将点击链接将项目添加到列表中,如书签。一旦他们点击了链接,按钮就会变成“查看列表”按钮。 – doubleplusgood

回答

1
// stop event propagation here 
return false; 

return false防止两者传播默认bahviour。后者正在关注<a href>元素的超链接。您应该只在此处调用e.stopPropagation()(并在函数签名中定义e)。

1

如前所述,jQuery事件处理函数中的return false可防止该事件的默认行为,当然,点击链接的默认行为是导航到链接href中的URL。

因此,通过您当前的代码,每次点击都会对当前的href中的URL进行Ajax调用,而无需默认导航。也就是说,第一次单击元素会对原始URL进行Ajax调用,然后更改URL。没有默认导航。第二次点击然后对新的 URL进行Ajax调用,但又没有默认导航。

如果这个想法是,只有第一次单击应该做的Ajax和更新href,以及第二次及以后点击将只是做标准导航到新的URL,那么你应该使用.one() method,而不是.bind().one()方法绑定一个只能为每个元素运行一次的事件处理程序。

或者,您需要在函数中添加一些额外的逻辑,以决定是否更改href以及是否返回false以取消默认的点击行为。和/或可能添加一个电话.off()(或.unbind())删除点击处理程序,一旦你不再需要它的特定链接。