Ked*_*dor 4 html javascript jquery textarea
问题:
我试图限制文本框中每行的行数和字母数.
到目前为止我得到了:
到目前为止,我设法限制行计数:
var text = $(this).val();
var lines = text.split("\n");
if(e.keyCode == 13 && lines.length >= $(this).attr('rows')) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果达到行限,则不允许用户按下返回键(keyCode 13).
问题:
现在我试图限制一行中的字母数量,因为如果我到达我的textarea的末尾(带返回键)我仍然可以持有一个字母/写大量文本,它将跳转到另一行当它到达终点时.这样,这种限制可能会被"欺骗",我正在寻找解决方案.
我的想法,没有解决问题:
else{
for(var i = 0; i < lines.length && e.keyCode != 13; i++) {
if(lines[i].length >= $(this).attr('cols')) {
return false; // prevent characters from appearing
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个来限制字母数量.这有效,但它有缺陷.如果我在一行中找到最大字母(ANY),我就可以在任何行中输入.
我不知道如何只检查我正在输入的行.
用chrome测试:http: //jsfiddle.net/3e3EH/1/
$(document).ready(function(){
var textArea = $('#foo');
var maxRows = textArea.attr('rows');
var maxChars = textArea.attr('cols');
textArea.keypress(function(e){
var text = textArea.val();
var lines = text.split('\n');
if (e.keyCode == 13){
return lines.length < maxRows;
}
else{
var caret = textArea.get(0).selectionStart;
console.log(caret);
var line = 0;
var charCount = 0;
$.each(lines, function(i,e){
charCount += e.length;
if (caret <= charCount){
line = i;
return false;
}
//\n count for 1 char;
charCount += 1;
});
var theLine = lines[line];
return theLine.length < maxChars;
}
});
});?
Run Code Online (Sandbox Code Playgroud)
正如jbabey指出的那样,ctrl + v或右击 - >粘贴可能是一个问题.右键单击很容易被阻止.对于ctrl + v,你可能也可以检测到它......只是禁用javascript也会明显破坏它.无论如何,作为任何客户端验证,您必须在服务器端进行双重检查.
小智 5
这就是我想出来的.相当干净,似乎适用于我可以给它的所有测试.
JavaScript的:
$(function () {
$('textarea').on('keypress', function (event) {
var text = $('textarea').val();
var lines = text.split("\n");
var currentLine = this.value.substr(0, this.selectionStart).split("\n").length;
console.log(lines);
console.log(currentLine);
console.log(lines[currentLine - 1]);
if (event.keyCode == 13) {
if (lines.length >= $(this).attr('rows')) return false;
} else {
if (lines[currentLine - 1].length >= $(this).attr('cols')) {
return false; // prevent characters from appearing
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
HTML:
<textarea rows="10" cols="15"></textarea>
Run Code Online (Sandbox Code Playgroud)