限制文本区域中的行数

我正在寻找可以限制行数的JavaScript(用户指的是某些文本由用户按键盘上的Enter键结束),该用户可以在textarea中输入内容。我找到了一些解决方案,但它们根本无法正常工作或表现得很奇怪。最好的解决方案是可以完成这项工作的jquery插件-

类似CharLimit,但是它应该能够限制文本行数而不是字符数。

回答:

可能会

有所帮助(可能最好使用jQuery,onDomReady并毫不干扰地将keydown事件添加到textarea),但已在IE7和FF3中进行了测试:

<html>

<head><title>Test</title></head>

<body>

<script type="text/javascript">

var keynum, lines = 1;

function limitLines(obj, e) {

// IE

if(window.event) {

keynum = e.keyCode;

// Netscape/Firefox/Opera

} else if(e.which) {

keynum = e.which;

}

if(keynum == 13) {

if(lines == obj.rows) {

return false;

}else{

lines++;

}

}

}

</script>

<textarea rows="4" onkeydown="return limitLines(this, event)"></textarea>

</body>

</html>

*编辑-说明:如果按下ENTER键,它将捕获按键,并且如果textarea中的行与textarea的行数相同,则不添加新行。否则,它将增加行数。

考虑到人们仍然在回答这个问题,我想我会尽可能地对其进行更新以处理粘贴,删除和剪切。

<html>

<head>

<title>Test</title>

<style>

.limit-me {

height: 500px;

width: 500px;

}

</style>

</head>

<body>

<textarea rows="4" class="limit-me"></textarea>

<script>

var lines = 1;

function getKeyNum(e) {

var keynum;

// IE

if (window.event) {

keynum = e.keyCode;

// Netscape/Firefox/Opera

} else if (e.which) {

keynum = e.which;

}

return keynum;

}

var limitLines = function (e) {

var keynum = getKeyNum(e);

if (keynum === 13) {

if (lines >= this.rows) {

e.stopPropagation();

e.preventDefault();

} else {

lines++;

}

}

};

var setNumberOfLines = function (e) {

lines = getNumberOfLines(this.value);

};

var limitPaste = function (e) {

var clipboardData, pastedData;

// Stop data actually being pasted into div

e.stopPropagation();

e.preventDefault();

// Get pasted data via clipboard API

clipboardData = e.clipboardData || window.clipboardData;

pastedData = clipboardData.getData('Text');

var pastedLines = getNumberOfLines(pastedData);

// Do whatever with pasteddata

if (pastedLines <= this.rows) {

lines = pastedLines;

this.value = pastedData;

}

else if (pastedLines > this.rows) {

// alert("Too many lines pasted ");

this.value = pastedData

.split(/\r\n|\r|\n/)

.slice(0, this.rows)

.join("\n ");

}

};

function getNumberOfLines(str) {

if (str) {

return str.split(/\r\n|\r|\n/).length;

}

return 1;

}

var limitedElements = document.getElementsByClassName('limit-me');

Array.from(limitedElements).forEach(function (element) {

element.addEventListener('keydown', limitLines);

element.addEventListener('keyup', setNumberOfLines);

element.addEventListener('cut', setNumberOfLines);

element.addEventListener('paste', limitPaste);

});

</script>

</body>

</html>

以上是 限制文本区域中的行数 的全部内容, 来源链接: utcz.com/qa/410590.html

回到顶部