2010-09-21 69 views
1

如果我綁定jQuery代碼的元素在頁面上找不到,會發生什麼情況? 以前的綁定代碼是否中斷?如果在頁面上找不到該元素,則綁定jQuery元素中斷?

讓我來解釋一下樣本。我有我的頁面內下面的代碼:

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.deleteMemo').live('click', function() { 
     $.ajax({ 
      [ajax call omitted for brevity] 
     }); 
    }); 

    $('.markAsViewed').live('click', function() { 
     $.ajax({ 
      [ajax call omitted for brevity] 
     }); 
    }); 
}); 
</script> 

現在,根據頁面的頁面狀態有可能是:

  • 與「deleteMemo」類
  • 只有元素「只有元素markAsViewed」類
  • 兩個

我experimentig的是,在第一種情況下(只有 「deleteMemo」 元素s),jQuery代碼根本不會被調用。我還沒有嘗試過其他的情況,但我已經三重檢查了代碼,甚至用提琴手來看它。

什麼建議嗎?

回答

1

因爲.live()沒有將處理程序綁定到實際元素,因此在調用.live()時元素是否在頁面上並不重要。

這是使用.live()的目的。它允許動態添加到頁面的元素觸發在它們存在之前添加的處理程序。

如果任何祖先.deleteMemo(例如)的停止事件的發生起泡,再live()不會爲單元工作。

所以,如果你有任何的祖先的點擊處理程序,要麼有:

event.stopPropagation(); 

或:

return false; 

...在他們的live()處理程序將不會觸發。

當然,如果選擇器不匹配(例如檢查大寫),那麼處理程序不會觸發。

+0

太棒了!在一起案件中被執行的是「返回虛假」。謝謝! – Lorenzo 2010-09-21 17:05:39

+0

@洛倫佐 - 不客氣。 :O) – user113716 2010-09-21 17:10:35