2010-11-11 51 views
0

我有兩個函數:一個在單擊按鈕時創建一個新的<textarea>,另一個函數在單擊時(或模糊,改變等)第二個函數根據類名選擇元素。看起來第二個函數只適用於加載頁面時存在的那些匹配元素,但它不會在任何新創建的元素上激活。任何人都可以找出爲什麼以及如何解決這個問題?您會在下面找到代碼。謝謝。 --JakejQuery問題:函數將不會在新創建的HTML元素上工作

$('#add').click(function() { 
    $(this).before("<textarea class='test'></textarea>") 
}) 

$('.test').blur(function() { 
    alert('just a test') 
}) 
+3

YALQ - 又一個生活()問題。 – Hogan 2010-11-11 19:50:24

回答

5

您創建的textarea不在當時jQuery將操作分配給標記爲.test類的元素。你需要live()函數來根據需要進行工作。

$('.test').live('blur', function() { 
    alert('just a test') 
}); 

現在標記。測試任元會自動無論在創建時綁定的模糊指定的函數。

+0

你輸入你的答案比我快:P – MLefrancois 2010-11-11 19:48:44

+0

其他解決方案是使用委託()或綁定事件處理程序到新創建的元素(這可能是好的,如果只添加一個'textarea') – 2010-11-11 19:49:40

+0

@MLefrancois:懷疑它,我不要打字太快。我*偶爾會在別人面前發現問題,彌補我的打字難題。 :) – 2010-11-11 19:51:33

1

您可以直接將其綁定:

$('#add').click(function() { 
    $(this).before("<textarea class='test'></textarea>").prev().blur(function() { 
     alert('just a test'); 
    }); 
}); 

或場所使用jQuery's .delegate() method放置處理器上的#add父。

$('#add').click(function() { 
    $(this).before("<textarea class='test'></textarea>") 
}).parent().delegate('.test','blur',function() { 
    alert('just a test'); 
}); 

這是比使用.live()更高效的方法。

相關問題