這裏有幾件事情應該修正。
1. parent()表示與您想象的不同。
結賬the documentation。在你提供的小提琴中的HTML中,沒有一個textareas具有除html正文以外的父項......它們都共享同一個父項!
<label>SchedulingComment: <span><span>255</span> characters remaining.</span></label><br />
<textarea id="SchedulingComment" cols="30" rows="3"></textarea>
如果您希望SchedulingComment具有相關的父項,則必須將其包裝在某個項目中。現在$(「#schedulingComment」)。parent()意思是「看看div裏面叫做.input-section的東西」。
2.使用這關鍵字更好
var activeItem = $(this).attr('id');
var count = $("#" + activeItem).text().length;
這太瘋狂了。爲什麼不只是做
var count = $(this).text().length;
它更有意義,並且不需要任何額外的DOM查找。
3.說到其中...... text()不能這樣工作。
使用val()而不是 text()用於獲取輸入框中的字符串。
4.使用選擇,當你更新你的HTML
當你改變你的HTML是
<span><div>255</div></span>
你的方式是痛苦的......你將不得不去更新所有你的JavaScript也是如此。它會吮吸,你會忘記你放置東西的所有地方。改用描述性類更好。我會做這樣的事情:
<div class="input-section">
<label>SchedulingComment:
<span class="character-count-holder">
<span class="character-count">255</span>
characters remaining.
</span>
</label><br />
<textarea id="SchedulingComment" cols="30" rows="3"></textarea>
</div>
和我的JavaScript看起來是這樣的:
$(".input-section input").keyup(function(){
var section = $(this.parent());
var count = 255 - $(this).val().length;
section.find(".character-count").text(count);
if(count < 0) {
section.find(".character-count-holder").css("color", "red");
} else {
section.find(".character-count-holder").css("color", "red");
}
});