2014-04-04 145 views
1

當用戶點擊按鈕時,我有一個帶有評論系統的網站編寫評論我附加一個textarea到文檔,以便他寫下他的評論並保存它。 我想添加一個charachters計數器到這個textarea,但是當添加jQuery代碼時什麼都沒有發生,它讓我沒有任何響應任何按鍵或按鍵。 我的代碼是:鍵盤和按鍵不起作用

$(document).ready(function(){ 
     var limitnum = 120; // set your int limit for max number of characters 
    $('.comment_area').keyup(function(){alert('test'); 
     limits($(this), limitnum); 
    }); 
}); 

附加textarea的代碼:

$("#section_bar").after('<p id="counter"><span>0</span> characters</p><textarea rows="4" cols="50" id="" class="comment_area" name="reply_area" ></textarea><a class="comment button small black" href="#!" id="reply_'+match_id+'"><span>save comment</span></a>'); 

我想知道爲什麼KEYUP或按鍵OES不行是相關的事實,我沒有textarea的時候DOM創建和加載(因爲我追加它之後)??

回答

1

您需要使用事件委託,因爲你不能用這種方式把事件處理程序時,DOM最初呈現不存在的元素。

你可以做到這一點,像這樣:

$('#section_bar').on('keyup','.comment_area',function() { 
    // Code here 
}); 

這應有助於:Understanding Event Delegation

1

您的代碼不工作,因爲你的textarea已被動態添加到DOM所以這.comment_area textarea的所有事件將不會被available.In這種情況下,你需要使用event delegationkeyup事件附加到這個新加入textarea

事件代表團允許我們附加一個單一的事件偵聽器,到 父元素,無論是現在存在的或將來添加這些兒童將火爲選擇, 匹配的兒童。

$('#section_bar').on('keyup','.comment_area',function() { 
    alert('test'); 
    limits($(this), limitnum); 
}); 
+0

只有當keyup事件冒起DOM':/' – Stphane

+0

是的。從[docs](http://api.jquery.com/keyup/):由於事件冒泡,除非明確停止,否則所有按鍵都會使DOM到達文檔對象。 – Felix

+0

細節':)'我知道有一些表單域特定的事件不會冒泡......只是想知道keyup是否屬於這個「集合」 – Stphane

0

如果元素不存在,但你總是可以註冊事件的父元素,並使用選擇在():

$('body').on('keyup', '.comment_area', function() { 
// ... 
}); 

現在的情況下被捕獲在主體元素,但如果事件目標給定的選擇相匹配的功能僅調用。

相關問題