IE8中的javascript-maxLength
使用javascript函数防止超过文本字段的长度,但仍允许在其中粘贴和编辑。需要在IE8和Firefox中工作IE8中的javascript-maxLength,javascript,internet-explorer-8,textarea,maxlength,Javascript,Internet Explorer 8,Textarea,Maxlength,使用javascript函数防止超过文本字段的长度,但仍允许在其中粘贴和编辑。需要在IE8和Firefox中工作 $(function() { var helper = document.createElement('textarea'); //if (!('maxLength' in helper)) { var supportsInput = 'oninput' in helper, ev = supportsInput ? 'inpu
$(function() {
var helper = document.createElement('textarea');
//if (!('maxLength' in helper)) {
var supportsInput = 'oninput' in helper,
ev = supportsInput ? 'input' : 'propertychange paste keyup',
handler = function() {
var maxlength = +$(this).attr('maxlength');
if (this.value.length > maxlength) {
this.value = this.value.substring(0, maxlength);
}
};
$('textarea[maxlength]').on(ev, supportsInput ? handler : function() {
var that = this;
setTimeout(function() {
handler.call(that);
}, 0);
});
//}
});
如果文本在maxLength=25的单行测试中,则可以正常工作。然而,它不做回车和换行,也不正确地解释它们
例如,如果我在一行中输入以下文本:
1111122222333334444455555
它使用全部25个字符
但是,如果我在每行输入文本并按enter键,则我可以输入以下内容:
11111
22222
33333
4444
只有22个字符。我知道它正在检测回车,因为当我输入:
11111
字符计数器显示5。当我按下回车键时,计数器变为6,如果我输入22222,计数器现在是11
我用来计算字符数的代码是:
$("#myTextArea").keyup(function() {
var j = $(this).val().length;
var i = 25 - j;
$("#charsUsed").text( j );
$("#charsLeft").text( i );
});
我想问题可能是我输入了一些代码来自动调整文本区域的大小,但事实并非如此。我确信我只是在代码上遗漏了一些东西&如果您能告诉我我做错了什么,我将不胜感激&我似乎还没有弄明白 我自己偶然发现了答案。事实证明,我使用的字符计数器没有准确地计算字符中的换行符 虽然我使用的是IE8,但我在一个问题中找到了答案,这个问题是关于Chrome在带有maxLength属性的textarea中错误地计算字符。这个问题很重要 我以前使用的代码:
$("#myTextArea").keyup(function() {
var j = $(this).val().length;
var i = 25 - j;
$("#charsUsed").text( j );
$("#charsLeft").text( i );
});
已修改为:
$("#myTextArea").keyup(function() {
var x = $("#myTextArea").val();
var newLines = x.match(/(\r\n|\n|\r)/g);
var addition = 0;
if (newLines != null) {
addition = newLines.length;
}
var j = x.length + addition;
var i = 25 - j;
$("#charsUsed").text( j );
$("#charsLeft").text( i );
});
嵌入的新行必须作为CR LF对传输-实际上是2个字符。感谢海报中的帮助