2013-10-20 122 views
2

我研究了各種JQuery插件來限制用戶可以在文本區域輸入的字符數,但是我沒有真正發現忽略空格的字符數。我嘗試使用$('textarea').val().replace(/ /g,'').length修改現有字符計數器與限制器,它確實有效。但是,當代碼達到限制時,我希望它使用戶無法再向文本區輸入任何內容。但是,它並不是真的那樣工作。JQuery字符限制器忽略文本區域中的空格

下面是代碼的插件:

(function ($) { 
$.fn.extend({ 
    limiter: function (limit, elem) { 
     $(this).on("keyup focus", function() { 
      setCount(this, elem); 
     }); 

     function setCount(src, elem) { 
      var chars = src.value.replace(/ /g,'').length; 
      if (chars > limit) { 
       src.value = src.value.substr(0, limit); 
       chars = limit; 
      } 
      elem.html(limit - chars); 
     } 
     setCount($(this)[0], elem); 
    } 
}); 
})(jQuery); 

我認爲問題在於src.value = src.value.substr(0, limit); 自限變量仍算空格作爲字符。作爲JQuery的初學者,我不確定如何處理這個問題。

任何幫助真的不勝感激。提前致謝!

這裏是我到目前爲止有一個小提琴:http://jsfiddle.net/dxUsK/1/

這是鏈接到原來的插件:http://www.scriptiny.com/2012/09/jquery-input-textarea-limiter/

+0

你想讓它只計算空格或空白(即新行/標籤等) – megawac

回答

2

問題在於這樣一個事實,你的正則表達式是消除從空格字符字符串,那麼當您設置源值時,您將刪除所有空格字符。一個簡單的解決方法是計算空格的數量,然後將其包含在字符串長度中。

// Count the number of space characters. 
var spaces = src.value.split(' ').length - 1; // remove 1 for index 0 later 
if (chars > limit) { 
    src.value = src.value.substr(0, limit + spaces); // Don't forget the spaces here! 

還有其他一些方法可以做到這一點,但這是一個普遍的想法。