2013-02-24 84 views
2

我有幾個動態加載的文本區域,當它們變得模糊時,它們似乎沒有響應。我使用.post加載它們(它們在一個php腳本中生成並作爲顯示數據返回)。我製作了this jsfiddle,它自己工作,但不在我的頁面上。問題是textareas是動態加載的嗎?我在其他地方閱讀過,我應該使用.on()作爲動態加載的元素(而且我的確使用它),但它仍然無法在我的頁面上工作。這是的jsfiddle jQuery代碼:Textarea沒有響應模糊jQuery

$('.crit_desc').on('blur', function() { 

    var value = $(this).val(); 
    alert(value); 

}); 

回答

5

你的代碼改成這樣:

$(document).on('blur', '.crit_desc', function() { 
    var value = $(this).val(); 
    alert(value); 
}); 

由於您的內容是動態加載,它們需要被綁定到存在於DOM當一個元素頁面加載。理想情況下,您想要一個元素比document更接近動態加載的元素以提高性能。

docs上。對():

的事件處理程序僅結合到當前選擇的元素;在代碼調用.on()時,頁面上必須存在 。 要確保元素存在並且可以選擇,請在頁面上的HTML標記中的 HTML標記中對元素執行文檔就緒處理程序內的事件 綁定。如果新頁面被注入頁面, 選擇元素並附加事件處理程序,當新的HTML被放置到頁面中時,頁面中的內容爲 。

+0

這工作!你能解釋一下爲什麼這會起作用,但是我以前沒有的東西沒有?以防萬一類似的事情再次發生。 – Veris 2013-02-24 18:07:16

+1

正如我在我的回答中所提到的,當你將事件綁定到動態加載的元素時,你必須以稍微不同的方式使用'.on()'。查看我的答案的解釋和'.on()'的文檔。哦,如果我的回答對你有幫助,請考慮對它進行評估並/或將其標記爲已接受的答案。 – j08691 2013-02-24 18:08:17

+0

好的,謝謝!只是當我第一次看到你的答案時,這個解釋並沒有出於某種原因。我會在需要的分鐘後接受答案。 – Veris 2013-02-24 18:11:57

0

如果它的動態加載使用的liveQuery http://docs.jquery.com/Plugins/livequery

$('.crit_desc').livequery('blur', function() { 
    var value = $(this).val(); 
    alert(value); 
}); 

或查看Simulating "focus" and "blur" in jQuery .live() method因爲.live不支持模糊和重點

+0

沒有必要使用一個插件的內置jQuery的東西。 – j08691 2013-02-24 18:20:51

+0

謝謝,我會考慮作爲替代。 – Veris 2013-02-24 18:21:03

+0

@ j08691你可是我不知道你的方法:) – 2013-02-24 18:29:08