Web 接口
HTMLTextAreaElement - 表示 <textarea> 元素
创建一个 textarea,控制每行最多字符数和最大行数
源代码:
点击运行 »
<!-- 在 HTML 中我们只需要将函数挂钩到 `onkeypress` 事件并指定我们的 textarea 不接受粘贴: --> <form> <p>每行具有固定字符数的 Textarea:<br /> <textarea cols="50" rows="10" onkeypress="return checkRows(this, event);" onpaste="return false;"></textarea> </p> </form> <script> // 创建一个函数,将文本字段和键盘事件作为输入,并确定是否已达到任何限制。如果尚未达到限制,则允许键盘输入。 function checkRows(oField, oKeyEvent) { var nKey = (oKeyEvent || /* old IE */ window.event || /* check is not supported! */ { keyCode: 38 }).keyCode, // 在这里放置每行的最大字符数: nCols = 10, // 在这里放置的最大行数: nRows = 5, nSelS = oField.selectionStart, nSelE = oField.selectionEnd, sVal = oField.value, nLen = sVal.length, nBackward = nSelS >= nCols ? nSelS - nCols : 0, nDeltaForw = sVal.substring(nBackward, nSelS).search(new RegExp("\\n(?!.{0," + String(nCols - 2) + "}\\n)")) + 1, nRowStart = nBackward + nDeltaForw, aReturns = (sVal.substring(0, nSelS) + sVal.substring(nSelE, sVal.length)).match(/\n/g), nRowEnd = nSelE + nRowStart + nCols - nSelS, sRow = sVal.substring(nRowStart, nSelS) + sVal.substring(nSelE, nRowEnd > nLen ? nLen : nRowEnd), bKeepCols = nKey === 13 || nLen + 1 < nCols || /\n/.test(sRow) || ((nRowStart === 0 || nDeltaForw > 0 || nKey > 0) && (sRow.length < nCols || (nKey > 0 && (nLen === nRowEnd || sVal.charAt(nRowEnd) === "\n")))); return (nKey !== 13 || (aReturns ? aReturns.length + 1 : 1) < nRows) && ((nKey > 32 && nKey < 41) || bKeepCols); } </script>
运行结果:
点击运行 »