javascript - 限制文本区域中单行的行数和字母数

标签 javascript jquery html textarea

问题:
我正在尝试限制文本框中每行的行数和字母数。

到目前为止我得到了什么:
到目前为止,我设法使用这个来限制行数:

var text = $(this).val();
var lines = text.split("\n");

if(e.keyCode == 13 && lines.length >= $(this).attr('rows')) { 
        return false;
    }

如果达到行数限制,这将不允许用户按下返回键(keyCode 13)。

问题:
现在我也试图限制一行中的字母数量,因为如果我到达我的文本区域的末尾(使用返回键)我仍然可以拿着一个字母/写大量的文本,当它到达时它会跳到另一行行结束。这样就可以“欺骗”此限制,我正在为此寻找解决方案。

我的想法,不解决问题:

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
         }
     }
}

我试过这个来限制字母的数量。这行得通,但它有缺陷。如果我在一行中达到最大字母数(任何),我将无法在任何行中键入

我不知道如何只检查我现在输入的行。

最佳答案

在 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;
        }
    });

});​

编辑

正如 jbabey 指出的那样,ctrl+v 或右键单击 -> 粘贴可能是个问题。可以很容易地阻止右键单击。对于 ctrl+v,您可能也可以检测到它... 仅仅禁用 javascript 显然也会破坏它。 无论如何,与任何客户端验证一样,您必须仔细检查服务器端。

关于javascript - 限制文本区域中单行的行数和字母数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11585880/

相关文章:

javascript - jQuery 更改属性并将其改回来

javascript - 有没有办法将 HTML 响应转换为 JSONP 对象或其他方式来获得成功事件?

javascript - 如何将特定超链接添加到 highcharts 折线图?

javascript - 将工具提示文本与其元素分开设置

javascript - 将返回的文本解析为定义的格式?

javascript - 在多个 div 之间自动淡入淡出/显示

python - pyFlask - 使用样式表,html 不加载 file.css

javascript - 获取两组字符之间的单词

html - 你能做一个尽可能小但尽可能宽的嵌套列 flexbox 吗?

javascript - 从 ios 数据中去除 html 标签