textarea稱文本域,又稱為文本區,即有滾動條的多行文本輸入控件,在網頁的提交表單中經常用到。與單行文字方塊text控制項不同,它不能透過maxlength屬性來限製字數,為此必須尋求其他方法來加以限制以達到預設的需求。
通常的做法就是使用#腳本語言來實現對textarea文字域的字數輸入限制,簡單而實用。假設我們有一個id為 txta1 的textarea文字區,我們可以透過以下程式碼限制它的鍵盤輸入字數為10個字(漢字或其他小角字元):
<script language="#" type="text/ecmascript"> window.onload = function() { document.getElementById('txta1').onkeydown = function() { if(this.value.length >= 10) event.returnValue = false; } } </script>
它的原理是透過對keydown(鍵盤鍵位按下)事件對指定id號的文本區進行監測,可以想像,它只能限制鍵盤輸入,如果用戶透過滑鼠右鍵貼上剪切板中的文本,它無法控製字數。
透過鍵盤輸入,以上文字區只能輸入10個字。但是,我們的目的並沒有達到!請隨便複製一些文本,試著用滑鼠右鍵貼上,看看發生了什麼。
你可以在網路上找到類似上述的其他JS腳本,它們不管多麼優秀,其原理都是一樣的,透過對keydown、keyup或keypress之類的鍵盤鍵位操作事件來監控文字區的輸入,無法防止滑鼠右鍵的貼,為此,如果一定要真正限制textarea的字數,我們還得為網頁加另一把鎖——禁用滑鼠右鍵,這無疑得付出額外的開銷,同時也可能是網頁製作者不一定願意做的。其實,還有更簡單的方法,使用onpropertychange屬性。
onpropertychange可以用來判斷預定元素的value值,當元素的value值發生變化時判斷事件就會被觸發,僅關心被監測元素的value值,避開了輸入的來源,從而可以比較理想地達成我們的限製字數這一目的。它屬於JS範疇,可以在表單方框區代表中嵌套使用,以下是代碼和效果樣式,可以像上面那樣測試輸入,你會發現它真正達到目的:不管用什麼方式輸入,它只能輸入100個字(漢字或其他小解符號):
代碼:
<textarea onpropertychange="if(value.length>100) value=value.substr(0,100)" class="smallArea" cols="60" name="txta" rows="8"></textarea>
當然,為了更為保險,處理表單資料的後台腳本程式也應該對提交的資料進行再一次的檢測,如果字數超出預設的數量則進行相應處理,這樣才達到真正限製字數的目的。 (完)
另外一種方法實作textarea限制輸入字數(包含中文只能輸入10個,全ASCII碼能夠輸入20個)
<script> function check() { var regC = /[^ -~]+/g; var regE = /\D+/g; var str = t1.value; if (regC.test(str)){ t1.value = t1.value.substr(0,10); } if(regE.test(str)){ t1.value = t1.value.substr(0,20); } } </script> <textarea maxlength="10" id="t1" onkeyup="check();"> </textarea>
還有一種方式:
function textCounter(field, maxlimit) { if (field.value.length > maxlimit){ field.value = field.value.substring(0, maxlimit); }else{ document.upbook.remLen.value = maxlimit - field.value.length; } }
<textarea name=words cols=19 rows=5 class=input1 onPropertyChange= "textCounter(upbook.words, 50) "> textarea> 剩余字数: <input name=remLen type=text id= "remLen " style= "background-color: #D4D0C8; border: 0; color: red " value=50 size=3 maxlength=3 readonly>
function LimitTextArea(field){ maxlimit=200; if (field.value.length > maxlimit) field.value = field.value.substring(0, maxlimit); }
<textarea cols=50 rows=10 name="comment" id="commentarea" onKeyDown="LimitTextArea(this)" onKeyUp="LimitTextArea(this)" onkeypress="LimitTextArea(this)" ></textarea>
title="The textarea width must less than 300 characters." 放在textarea 裡面提示輸入最大位元組數。
例如:
<textarea title="The textarea width must less than 300 characters." cols=50 rows=10 name="comment" id="commentarea" onKeyDown="LimitTextArea(this)" onKeyUp="LimitTextArea(this)" onkeypress="LimitTextArea(this)" ></textarea>