使用javascript函数来防止超出文本字段的长度,但仍然允许粘贴&在其中编辑。需要在IE8和IE中工作Firefox浏览器。
$(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个字符。
但是,如果我在每行输入文字&点击进入,这是我能够输入的内容:
11111
22222
33333
4444
只有22个字符。我知道它正在检测回车,因为我放入时: 11111
字符计数器显示5.当我按下enter
键时,计数器变为6,如果我输入22222
,则计数器现在为11。
我用来计算字符的代码是:
$("#myTextArea").keyup(function() {
var j = $(this).val().length;
var i = 25 - j;
$("#charsUsed").text( j );
$("#charsLeft").text( i );
});
我认为问题可能是我自动调整TextArea大小的一些代码,但事实并非如此。我确信我只是遗漏了代码中的一些内容。我会很感激我对错误的看法。似乎还没弄明白。
答案 0 :(得分:0)
<textarea>
中的换行符。
虽然我使用的是IE8,但我在使用maxLength属性的textarea中对Chrome计数字符错误的问题中找到答案。那个问题是here。
我之前使用的代码:
$("#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个字符。感谢other thread中的海报帮助他们。