在textarea中限制单行中的行数和字母数量 [英] Limiting number of lines and letters in single line in textarea

查看:723
本文介绍了在textarea中限制单行中的行数和字母数量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题:

我想限制文本框中每行的行数和字母数。



到目前为止:

到目前为止,我设法使用此限制行数:

  var text = $(this).val(); 
var lines = text.split(\\\
); (e.keyCode == 13&& line.length> = $(this).attr('rows')){
return false;

if

$ / code>

这将不允许用户按下返回键(keyCode 13)线路达到限制。



问题:

现在我想限制一行中的字母数量,因为如果我到达我的textarea的末尾(带返回键),我仍然可以持有一个字母/写入大量文本,并在到达行尾时跳到另一行。这样,这个限制可以被欺骗,我正在寻找一个解决方案。



我的想法,没有解决问题:

  else {
for(var i = 0; i< lines.length&& e.keyCode! = 13; i ++){
if(lines [i] .length> = $(this).attr('cols')){
return false; //防止字符出现



code $ $ $ $ $ $ $ $ $ $ $ $ $我试图限制字母数量。这有效,但它有缺陷。如果我在一行( ANY )中达到最大字母数,则我将 任意行中的CANT类型



我不知道如何检查只输入RIGHT NOW的行。

h2_lin>解决方案

使用chrome进行测试:
http:// jsfiddle .net / 3e3EH / 1 /

  $(document).ready(function(){
var textArea = $('#foo');
var maxRows = textArea.attr('rows');
var maxChars = textArea.attr('cols');
textArea.keypress (函数(e){
var text = textArea.val();
var lines = text.split('\\\
');
if(e.keyCode == 13) {
return lines.length< maxRows;
}
else {
var caret = textArea.get(0).selectionStart;
console.log(插入符号) ;

var line = 0;
var charCount = 0;
$ .each(lines,function(i,e){
charCount + = e.length ;
if(ca ret <= charCount){
line = i;
返回false;
}
// \\\
count for 1 char;
charCount + = 1;
});

var theLine = lines [line];
返回theLine.length< maxChars属性;
}
});

));



编辑



正如jbabey指出的,ctrl + v或右键单击 - >粘贴可能是一个问题。右键点击可以很容易地避免。对于Ctrl + V,你可能会发现它...
只是禁用javascript显然会打破这个事情。
无论如何,作为任何客户端验证,您必须在服务器端进行仔细检查。


Problem:
I am trying to limit number of lines AND letters in each line in a textbox.

What i got so far:
So far i managed to limit lines count using this:

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

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

This won't allow user to push return key (keyCode 13) if the limit of lines is reached.

The problem:
Now i am trying to limit number of letters in a single line too, because if i reach end of my textarea (with return key) i still can hold a letter/write tons of text, and it will jump to another line when it reaches end of line. That way this limitation can be "cheated" and i am looking for a solution for that.

My ideas, not solving the problem:

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

I tried this to limit number of letters. That works, but it got flaws. If i reach max letters in one line (ANY), i CANT TYPE IN ANY LINE anymore.

I have no idea how to check only line i am typing in RIGHT NOW.

解决方案

Tested in 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;
        }
    });

});​

Edit

As jbabey pointed out, ctrl+v or right-click -> paste can be an issue. right click can easily be prevented. for ctrl+v, you probable can detect it too... Just disabling javascript will obviously break the thing, too. Anyways, as any client-side validation, you have to double check on server-side.

这篇关于在textarea中限制单行中的行数和字母数量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆