/* input 和 textarea 最大文字限定插件
* 修改版, 一个中文表示1一个字, 一个英文半个字;
* TextLimit - jQuery plugin for counting and limiting characters for input and textarea fields
*
* pass '-1' as speed if you don't want the char-deletion effect. (don't just put 0)
* Example: jQuery("Textarea").textlimit('span.counter',256)
*
* $Version: 2009.07.25 +r2
* Copyright (c) 2009 Yair Even-Or
* vsync.design@gmail.com
*/
;
String.prototype.getBytes =
function
() {
var
cArr =
this
.match(/[^\x00-\xff]/ig);
return
this
.length + (cArr ==
null
? 0 : cArr.length);
};
(
function
(jQuery) {
jQuery.fn.textlimit=
function
(counter_el, thelimit, speed) {
var
charDelSpeed = speed || 15;
var
toggleCharDel = speed != -1;
var
toggleTrim =
true
;
var
that =
this
[0];
var
isCtrl =
false
;
updateCounter();
function
updateCounter(){
if
(
typeof
that ==
"object"
)
jQuery(counter_el).text(thelimit - Math.ceil(that.value.getBytes()/2));
};
this
.keydown (
function
(e){
if
(e.which == 17) isCtrl =
true
;
var
ctrl_a = (e.which == 65 && isCtrl ==
true
) ?
true
:
false
;
// detect and allow CTRL + A selects all.
var
ctrl_v = (e.which == 86 && isCtrl ==
true
) ?
true
:
false
;
// detect and allow CTRL + V paste.
// 8 is 'backspace' and 46 is 'delete'
if
(
this
.value.length >= thelimit && e.which !=
'8'
&& e.which !=
'46'
&& ctrl_a ==
false
&& ctrl_v ==
false
)
e.preventDefault();
})
.keyup (
function
(e){
updateCounter();
if
(e.which == 17)
isCtrl=
false
;
if
(
this
.value.length >= thelimit && toggleTrim ){
if
(toggleCharDel){
// first, trim the text a bit so the char trimming won't take forever
// Also check if there are more than 10 extra chars, then trim. just in case.
if
( (
this
.value.length - thelimit) > 10 )
that.value = that.value.substr(0,thelimit+100);
var
init = setInterval
(
function
(){
if
( that.value.length <= thelimit ){
init = clearInterval(init); updateCounter()
}
else
{
// deleting extra chars (one by one)
that.value = that.value.substring(0,that.value.length-1); jQuery(counter_el).text(Math.ceil(that.value.getBytes()/2));
}
} ,charDelSpeed
);
}
else
this
.value = that.value.substr(0,thelimit);
}
});
};
})(jQuery);