我正在寫一個腳本,如果textarea中沒有足夠的單詞,將顯示一條錯誤消息。JavaScript重構無法正常工作 - getElementById返回null
時,我明確指出我針對的元素,它工作得很好:
HTML:
<div class="form-group">
<label for="trainee[about]">About <span>(Minimum 20 words)</span></label>
<textarea id="aboutText" type="text" name="trainee[about]" cols="80" rows="10" onkeypress="activateSubmit();">
<%= @profile["about"] %>
</textarea>
<p id="aboutError" class="word-error">Min. 20 words!</p>
</div>
的JavaScript:
function activateSubmit(){
var len = $('#aboutText').val().split(" ").length;
console.log(len);
if(len >= 20) {
document.getElementById('aboutError').style.display = "none";
} else {
document.getElementById('aboutError').style.display = "block";
}
}
然而,當我試圖重構它這樣我可以在多個字段上使用它我收到一個錯誤說:
Uncaught TypeError: Cannot read property 'style' of null
這裏是重構的代碼:
HTML:
<div class="form-group">
<label for="trainee[about]">About <span>(Minimum 20 words)</span></label>
<textarea id="aboutText" type="text" name="trainee[about]" cols="80" rows="10" onkeypress="activateSubmit(aboutText, aboutError);">
<%= @profile["about"] %>
</textarea>
<p id="aboutError" class="word-error">Min. 20 words!</p>
</div>
和JS:
function activateSubmit(idText,idError){
var len = $(idText).val().split(" ").length;
console.log(len);
if(len >= 20) {
document.getElementById(idError).style.display = "none";
} else {
document.getElementById(idError).style.display = "block";
}
}
的JavaScript是在頁面的底部,所以它不應該是這樣的元素尚未加載,加上它在重構之前工作。
任何想法? 感謝
您需要報價這裏'onkeypress事件=「activateSubmit(aboutText,aboutError);'* * ==> **'onkeypress =「activateSubmit('aboutText','aboutError');'。另外,爲什麼不使用jQuery。 – Tushar
我也會建議使用jQuery的'on'來綁定事件。 '('#aboutText')。on('keyup',function(){$('#aboutError')。toggle($(this).val()。split(/ \ s + /)。length <20) ;});' – Tushar
啊這麼明顯!非常感謝,欣賞它。我沒有使用jQuery的原因是因爲我真的不知道任何對JS非常新穎的東西,只是試圖讓一些東西臨時進行,而我學到更多 –