jquery判定文字入力個数(数字は英語で1、中国語で2、長さを超えると自動的に切り取る)

2206 ワード

1. $('textarea#txtPrizeNote');//textareaコントロール名を表す
2.'span'余剰文字数を表示するラベル
HTML:
 
  


*



 
  
<br>// val <br>function getByteLen(val) { <br>var len = 0; <br>for (var i = 0; i < val.length; i++) { <br>if (val[i].match(/[^\x00-\xff]/ig) != null) // <br>len += 2; <br>else <br>len += 1; <br>} <br>return len; <br>} <br>// val max <br>function getByteVal(val, max) { <br>var returnValue = ''; <br>var byteValLen = 0; <br>for (var i = 0; i < val.length; i++) { <br>if (val[i].match(/[^\x00-\xff]/ig) != null) <br>byteValLen += 2; <br>else <br>byteValLen += 1; <br>if (byteValLen > max) <br>break; <br>returnValue += val[i]; <br>} <br>return returnValue; <br>} <br>$(function() { <br>var _area = $('textarea#txtPrizeNote'); <br>var _info = _area.next(); <br>var _max = _area.attr('maxlength'); <br>var _val; <br>_area.bind('keyup change', function() { // keyup change <br>if (_info.find('span').size() < 1) {// <br>_info.append(_max); <br>} <br>_val = $(this).val(); <br>_cur = getByteLen(_val); <br>if (_cur == 0) {// 0 , maxlength <br>_info.text(_max); <br>} else if (_cur < _max) {// , max-cur <br>_info.text(_max - _cur); <br>} else {// <br>_info.text(0); <br>$(this).val(getByteVal(_val,_max)); // <br>} <br>}); <br>}); <br>