2014-01-24 57 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

问题依然存在 –