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有点哭喊:当行满时,它不会跳到下一个字段
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有点哭喊:当行满时,它不会跳到下一个字段
maxlength
属性,但HTML、CSS和JavaScript可能会被黑客攻击。进行服务器端检查以确保安全。还应使用客户端,但不会防止潜在问题。可以使用HTMLmaxlength
属性,但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键。这并不妨碍用户输入任何行数。它只是阻止他查看所有他键入的内容和使用滚动条