今天接到任務的第一個需求是限制字數,查看了一下之前人留下來的代碼,使用的是textarea,於是就想當然的用了maxlength,結果發現無用。查閱得知,原來textarea對於maxlength的支持要到ie10了,客戶偏偏要求開發環境是ie8。。。只好重新尋找方法。
這里的需求難點主要是不單單對於鍵盤輸入需要限制,同時對於復制粘貼也要限制。最好的方法就是在用戶超過限制的時候,彈出彈框,並強制取范圍內的輸入字符。這樣能夠較好的實現前端的用戶要求,對於以后的數據庫處理也比較方便。
原本想的是用key相關方法來檢測,具體方法寫法很簡單:
1 <script> 2 function LimitTextArea(field) { 3 maxlimit = 4000; 4 if (field.value.length > maxlimit) { 5 field.value = field.value.substring(0, maxlimit); 6 alert("字數不得多於4000!"); 7 } 8 } 9 </script>
1 <textarea id="mqOne" name="mqOne" cols="10" rows="5" style="width: 200px" onKeyDown="LimitTextArea(this)" onKeyUp="LimitTextArea(this)" onkeypress="LimitTextArea(this)"></textarea>
但是事實證明這個方法對於鼠標操作無法檢測,對於ctrl+v倒是可以。最后采用的是onpropertychange方法:
<textarea id="mqOne" name="mqOne" cols="10" rows="5" style="width: 200px" onpropertychange="LimitTextArea(this)"></textarea>
可是這也是IE專有的方法,FF之類的可以使用oninput的方法,使用方法同樣:
<textarea id="mqOne" name="mqOne" cols="10" rows="5" style="width: 200px" oninput="LimitTextArea(this)"></textarea>
如果使用了瀏覽器檢測可以分開,如果沒有可以把兩個屬性寫在一起同時使用,暫時沒發現什么問題。
