textarea上的onkeyup和onkeydown来控制maxlength

时间:2014-02-06 21:36:57

标签: javascript html jsp textarea struts

我想在textarea中有一个maxlength,但是html:textarea没有maxlength属性。所以我使用了foll。代码:

<html:textarea rows="5" cols="60" onkeyup="return imposeMaxLength(this, 50);" onkeydown="return imposeMaxLength(this, 50);" property="abc"></html:textarea>

function imposeMaxLength(Object, MaxLen)
    {
      return (Object.value.length <= MaxLen);
    }

这限制了textarea中的字符&lt; 50但是一旦达到极限(即我的情况下为50),光标就不起作用了。我无法在textarea中移动光标。我的意思是我无法删除内容或使用退格键或执行ctrl + A和删除。内容保持不变或textares内容无法更改。是否有任何解决方法可以使其工作或任何其他建议?

2 个答案:

答案 0 :(得分:1)

您遇到的问题是在达到最大长度后限制任何输入。可能最好将输入切片到您想要的大小。添加事件处理程序不是必需的,但应避免使用html中的内联处理程序。

var myTextarea = document.querySelector("#my-textarea");
var DEFAULT_MAX_LENGTH = 5;

function limitLength() {
  var maxLength = this.getAttribute("max-length") || DEFAULT_MAX_LENGTH;
  if (this.value.length > maxLength) {
    this.value = this.value.slice(0, maxLength);
  }
}

myTextarea.addEventListener("keydown", limitLength.bind(myTextarea));
myTextarea.addEventListener("keyup", limitLength.bind(myTextarea));

Example Code on Plunker

答案 1 :(得分:0)

我对你的HTML语法和浮动JavaScript不太确定,但也许这只是你的问题。

在任何情况下,此时您都会在达到最大长度后取消所有键。你想要的是单独留下控制键。这包括箭头键,Ctrl-A,删除,退格......

在测试中,首先检查密钥,如果是特殊密钥,则始终返回true。否则返回当前测试的结果。您可以使用alert()或console.log()进行测试,以查看特殊键代码是什么:

console.log("Received key = " + Object.keycode);

你在这里遇到的问题还在于你没有使用jQuery,而且“keycode”参数不适用于所有浏览器。使用jQuery,您将取消默认传播,并使用jQuery提供的事件对象。它使您的代码更轻松/更清晰地处理这些事情。

P.S。我会避免为JavaScript变量使用名称“Object”。 “Obj”可能更安全。