zoukankan      html  css  js  c++  java
  • input 和 textarea 输入框最大文字限制插件

    /* 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);
  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/henw/p/2225237.html
Copyright © 2011-2022 走看看