2014-01-24 84 views
0

我一直在嘗試幾個小時來弄清楚這一點。 爲什麼在一個多行文本框asp控件中,我有140個字符的限制,但有時我可以輸入141或142個字符,尤其是使用回車鍵?檢查多行文本框的大小

這裏是我的代碼

function CheckSize(o, size) { 
    if (o != null) { 
     var s = o.value.length; 
     if (s > size) { 
      debugger; 
      alert('Lamentamos mas foi atingido o limite máximo para o texto a introduzir.\nSugerimos que introduza um texto com menos de ' + size + ' caracteres.\nAgradecemos a sua compreensão.'); 
      // alert(resources.error_reachedMaxNumberOfChars.replace("{0}",String(size))); 
      var trim = o.value.trim(); 
      o.value = trim.substring(0, size - 1); 
     } 
    } 
} 
+2

你怎麼涉及此功能,您的標記?你能否提供你正在遇到的問題的[jsFiddle](http://jsfiddle.net/)? – Xotic750

+0

注意:'substring()'不會使用第二個參數指定位置的字符,所以您不需要' - 1'。 。 。這應該是你在找什麼:'o.value = trim.substring(0,size);' – talemyn

+1

此外,你使用什麼瀏覽器? IE8及以下版本不支持字符串的「trim()」方法。這將打破邏輯,因爲它試圖修剪textarea中的值。 – talemyn

回答

0

我的猜測是,是,你正在運行到相當普遍maxLength錯誤,目前已在一些現代瀏覽器(do a Google search about it)。這是一個如何解決該問題的例子,儘管沒有針對每種情況(即粘貼)加以強化。

CSS

.hidden { 
    visibility: hidden; 
} 

HTML

<textarea id="myTextbox" maxlength="140" rows="4" cols="35"></textarea> 
<div id="count">0</div> 
<div id="alert" class="hidden">At max chars!</div> 
<div id="newline" class="hidden">Newline prevented as it is 2 characters!</div> 

的Javascript

var myTextBox = document.getElementById('myTextbox'), 
    count = document.getElementById('count'), 
    alert = document.getElementById('alert'), 
    newline = document.getElementById('newline'), 
    maxLength = 140; 

myTextBox.addEventListener('input', function (e) { 
    var value = e.target.value.replace(/\r?\n/g, '\r\n'), 
     length = value.length; 


    if (length >= maxLength) { 
     if (length > maxLength) { 
      length = maxLength - 1; 
      e.target.value = value.slice(0, length); 
      newline.classList.remove('hidden'); 
     } else { 
      alert.classList.remove('hidden'); 
      newline.classList.add('hidden'); 
     } 
    } else { 
     alert.classList.add('hidden'); 
     newline.classList.add('hidden'); 
    } 

    count.textContent = length; 
}, false); 

jsFiddle

+0

很適合在最近的瀏覽器中使用 但是業務需求需要IE( –

+0

)對於不支持'addEventListender'但使用'attachEvent' ,那麼你需要以不同的方式分配事件監聽器,與'classList'一樣,你需要添加和刪除一個polyfil/shim類,否則一切都是兼容的。 。而不是'input',你可以使用'keypress'或類似的東西來滿足你的需求。 – Xotic750

0

請嘗試以下代碼:

function CheckSize(textBox, maxLength) 
{ 
    if (textBox.value.length > maxLength) 
    { 
     alert("Max characters allowed are " + maxLength); 
     textBox.value = textBox.value.substr(0, maxLength); 
    } 
} 
+0

問題依然存在 –