【发布时间】:2017-11-02 09:55:13
【问题描述】:
在 textarea 字段中,我必须实施以下限制
1. textarea 行数限制为 6
2. textarea cols 限制为 20
3. 如果任何行超过 20 长度,如果行可用,该行将分成两行
我的代码:
function limitTextareaLine(e) {
if (e.keyCode == 13
&& $(this).val().split("\n").length >= $(this).attr('rows')) {
return false;
}
var result = "";
var textArray = $(this).val().split("\n");
alert(textArray.length);
for (var i = 0; i < textArray.length; i++) { //Unable to iterate loop
if (textArray[i].length > 5) {
alert('aaa');
if (textArray.length == 6) {
alert("nnnnn");
return false;
}
result += textArray[i] + "\n";
} else {
result += textArray[i];
}
alert(textArray[i])
}
for ( var line in textArray) {
}
alert(result);
$(this).val(result);
}
$(function() {
$('textarea.limited').keydown(limitTextareaLine);
});
<textarea rows="6" cols="20" class="limited"></textarea>
上面的代码循环不起作用。只有第一行会迭代。
请建议是否有更好的方法来做到这一点。
我的要求是 textarea 文件最多有 6 行,每行的最大字符数为 20。如果任何行超过最大字符数限制,如果最大行数限制可用,则分成两行。
【问题讨论】:
-
不需要 JS,只需在 HTML 中使用
wrap="hard"属性 -
我认为您的问题可能与您的 textArray 变量有关。 split 函数为每个拆分创建一个数组。所以也许试试'i
-
啊。在这种情况下,我建议使用 6 个带有
maxlength="20"的文本框 -
@MakarandPatil 在这种情况下,您可以插入超过 10 行长度为 5 的行。rows="6" 不会限制行数限制。
-
不要使用
for...in来遍历数组,它是doesn't guarantee the order it iterates in!请改用Array.prototype.forEach、for或for...of。根据您正在做的事情,Array.prototype.reduce之类的东西也可能会起作用。
标签: javascript jquery html