2012-11-15 74 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())刪除點擊處理程序,一旦你不再需要它的特定鏈接。