Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何限制a<;中的行数;textarea>;?_Javascript_Html_Css - Fatal编程技术网

Javascript 如何限制a<;中的行数;textarea>;?

Javascript 如何限制a<;中的行数;textarea>;?,javascript,html,css,Javascript,Html,Css,鉴于此代码: <textarea rows="4" cols="50"> At w3schools.com you will learn how to make a website. We offer free tutorials in all web development technologies. </textarea> 在w3schools.com,您将学习如何创建网站。我们提供所有课程的免费教程 网络开发技术。 有4行要键入 但是,当用户按

鉴于此代码:

<textarea rows="4" cols="50">
    At w3schools.com you will learn how to make a website. We offer free tutorials in all
    web development technologies.
</textarea>

在w3schools.com,您将学习如何创建网站。我们提供所有课程的免费教程
网络开发技术。
有4行要键入

但是,当用户按enter键或文本溢出到第5行时,如何应用CSS禁用另一行

谢谢使用文本区 太过限制文本区域中的行和字符,您可以使用我刚刚制作的脚本:

JAVASCRIPT:

function textarealimit(textarea, rows, chars, rowsleft_id, charsleft_id) {
    var newValue;
    var valueSegments = textarea.value.split('\n');
    if(rows != undefined && valueSegments.length > rows) { // too many rows
        newValue = valueSegments.slice(0, rows).join("\n");
    }
    if(chars != undefined && textarea.value.length > chars) { // too many chars
        if(newValue != undefined) 
            newValue = newValue.substring(0, chars);
        else
            newValue = textarea.value.substring(0, chars);
    }
    if(newValue != undefined) textarea.value = newValue;

    if(rowsleft_id != undefined) {
        if(textarea.value == "") document.getElementById(rowsleft_id).innerHTML = rows;
        else if(rows - valueSegments.length >= 0) document.getElementById(rowsleft_id).innerHTML = rows - valueSegments.length;
    }
    if(charsleft_id != undefined) {
        if(chars != undefined) document.getElementById(charsleft_id).innerHTML = chars - textarea.value.length;
    }
}
HTML:

如您所见,每个输入字段都有自己的ID,您可以在rowfieldkeynav调用中引用上一个和下一个输入字段

要设置样式并使其看起来像文本区域,可以使用以下CSS:

.rowfield {
    margin: 0 0 -1px 0;
    display: block;
}
.rowfield.top {
    border-bottom: 0;
}
.rowfield.middle {
    border-top: 0;
    border-bottom: 0;
}
.rowfield.bottom {
    border-top: 0;
}
最后是JAVASCRIPT函数:

function rowfieldkeynav(e, before_id, after_id) {
    var evtobj = window.event ? event : e //distinguish between IE's explicit event object (window.event) and Firefox's implicit.
    var unicode = evtobj.charCode ? evtobj.charCode : evtobj.keyCode;
    if(before_id != undefined && e.currentTarget.value.length == 0 && unicode == 08) { // BACKSPACE
        document.getElementById(before_id).focus();
    }
    else if(after_id != undefined && unicode == 13 || e.currentTarget.value.length >= e.currentTarget.maxLength) { // ENTER or end of row reached
        document.getElementById(after_id).focus();
    }
}
当当前输入字段为空且您按BACKSPACE键时,它将跳转到上一个输入字段。当您按ENTER键或达到maxlength时,它将跳转到下一个输入字段

这里再次为您演示:

这种方法仅有的几个缺点是:

    它会在一个单词的中间跳进一个新行,所以它不会把你现在的单词带入新的输入字段。
  • 使用鼠标时不能选择多行
  • 单击此处可以跳转到下一行
  • 如果删除另一个填充行上方的行,文本将不会向上移动
  • IE8和perhabs lower有点哭喊:当行满时,它不会跳到下一个字段
使用文本区域 太过限制文本区域中的行和字符,您可以使用我刚刚制作的脚本:

JAVASCRIPT:

function textarealimit(textarea, rows, chars, rowsleft_id, charsleft_id) {
    var newValue;
    var valueSegments = textarea.value.split('\n');
    if(rows != undefined && valueSegments.length > rows) { // too many rows
        newValue = valueSegments.slice(0, rows).join("\n");
    }
    if(chars != undefined && textarea.value.length > chars) { // too many chars
        if(newValue != undefined) 
            newValue = newValue.substring(0, chars);
        else
            newValue = textarea.value.substring(0, chars);
    }
    if(newValue != undefined) textarea.value = newValue;

    if(rowsleft_id != undefined) {
        if(textarea.value == "") document.getElementById(rowsleft_id).innerHTML = rows;
        else if(rows - valueSegments.length >= 0) document.getElementById(rowsleft_id).innerHTML = rows - valueSegments.length;
    }
    if(charsleft_id != undefined) {
        if(chars != undefined) document.getElementById(charsleft_id).innerHTML = chars - textarea.value.length;
    }
}
HTML:

如您所见,每个输入字段都有自己的ID,您可以在rowfieldkeynav调用中引用上一个和下一个输入字段

要设置样式并使其看起来像文本区域,可以使用以下CSS:

.rowfield {
    margin: 0 0 -1px 0;
    display: block;
}
.rowfield.top {
    border-bottom: 0;
}
.rowfield.middle {
    border-top: 0;
    border-bottom: 0;
}
.rowfield.bottom {
    border-top: 0;
}
最后是JAVASCRIPT函数:

function rowfieldkeynav(e, before_id, after_id) {
    var evtobj = window.event ? event : e //distinguish between IE's explicit event object (window.event) and Firefox's implicit.
    var unicode = evtobj.charCode ? evtobj.charCode : evtobj.keyCode;
    if(before_id != undefined && e.currentTarget.value.length == 0 && unicode == 08) { // BACKSPACE
        document.getElementById(before_id).focus();
    }
    else if(after_id != undefined && unicode == 13 || e.currentTarget.value.length >= e.currentTarget.maxLength) { // ENTER or end of row reached
        document.getElementById(after_id).focus();
    }
}
当当前输入字段为空且您按BACKSPACE键时,它将跳转到上一个输入字段。当您按ENTER键或达到maxlength时,它将跳转到下一个输入字段

这里再次为您演示:

这种方法仅有的几个缺点是:

    它会在一个单词的中间跳进一个新行,所以它不会把你现在的单词带入新的输入字段。
  • 使用鼠标时不能选择多行
  • 单击此处可以跳转到下一行
  • 如果删除另一个填充行上方的行,文本将不会向上移动
  • IE8和perhabs lower有点哭喊:当行满时,它不会跳到下一个字段

可以使用HTML
maxlength
属性,但HTML、CSS和JavaScript可能会被黑客攻击。进行服务器端检查以确保安全。还应使用客户端,但不会防止潜在问题。

可以使用HTML
maxlength
属性,但HTML、CSS和JavaScript可能会受到攻击。进行服务器端检查以确保安全。还应使用客户端,但这不会防止潜在问题。

限制行(行)的使用

参见示例

(函数(){
var a=document.getElementById(“txtField”),
limit=4;//定义最大行数限制
函数限制线(){
var l=a.value.replace(//\r\n/g,“\n”).replace(//\r/g,“”).split(//\n/g);//拆分行
如果(l.长度>限制){
a、 value=l.slice(0,limit).join(“\n”);
}
}
函数paste(){//onpaste需要超时
设置超时(限制线,1);
}
limitLines();//类似于onload
a、 onkeyup=限制线;
a、 onpaste=粘贴;
})();
1
2.
3.
4
限制行(行)的使用

参见示例

(函数(){
var a=document.getElementById(“txtField”),
limit=4;//定义最大行数限制
函数限制线(){
var l=a.value.replace(//\r\n/g,“\n”).replace(//\r/g,“”).split(//\n/g);//拆分行
如果(l.长度>限制){
a、 value=l.slice(0,limit).join(“\n”);
}
}
函数paste(){//onpaste需要超时
设置超时(限制线,1);
}
limitLines();//类似于onload
a、 onkeyup=限制线;
a、 onpaste=粘贴;
})();
1
2.
3.

4
您可以在CSS中执行以下操作:

textarea {
    overflow:hidden;
    resize:none;
}
这将关闭调整文本区域大小的可能性,并隐藏除指定行数以外的所有内容


此外,您可能希望通过
maxlength
()限制文本区域的字符数,这在HTML5中是可能的。

您可以在CSS中执行以下操作:

textarea {
    overflow:hidden;
    resize:none;
}
这将关闭调整文本区域大小的可能性,并隐藏除指定行数以外的所有内容


此外,您可能希望通过
maxlength
()限制文本区域的字符数,这在HTML5中是可能的。

您不能在CSS中设置此类限制。您可以在HTML中设置最大字符数,但这不是一回事。您可以使用JavaScript计算行数并施加限制


通常,最好的方法似乎是避免问题:使用四个
input
元素,而不是
textarea
元素。缺点是用户需要用tab键转到下一个字段,而不是只按Enter键。

您不能在CSS中设置此类限制。您可以在HTML中设置最大字符数,但这不是一回事。您可以使用JavaScript计算行数并施加限制


通常,最好的方法似乎是避免问题:使用四个
input
元素,而不是
textarea
元素。缺点是用户需要用tab键转到下一个字段,而不是只按Enter键。

这并不妨碍用户输入任何行数。它只是阻止他查看所有他键入的内容和使用滚动条