jQuery val()方法为keypress事件返回的字符太少

时间:2011-12-21 19:08:27

标签: javascript jquery javascript-events keypress

在我的表单中,我添加了一个文本框($("#seltxt"))和一个内置文本的div。当我选择div文本进入文本框时,这工作正常。现在我在按键事件中的#seltxt中添加了功能键按压我将文本框文本复制到div。但它减少了一个字符。

示例:

当点击div时,

div有文字“manojgangwar”,“manojgangwar”复制到#seltxt。现在假设我在文本框中写了字符“manojgangwar123”然后在div中它只会出现“manojgangwar12”

下面是捕获keypress事件的jQuery

 //function to set text to div

$("#seltxt").keypress( function(event) {
   $('#' + objid).text($("input#seltxt").val());
});

2 个答案:

答案 0 :(得分:5)

在发生默认行为之前,按下某个键时会触发按键事件。这允许脚本通过event.preventDefault()方法取消默认行为(例如填充输入字段)。

如果您需要在输入值发生更改时触发的事件,请使用keyup事件。

此外,由于$("input#selText")指向自身,您也可以使用$(this).val()。进一步的优化包括使用this.value,这是普遍支持的。

$("#seltxt").keyup( function(event) {
   $('#' + objid).text(this.value);
});

关键事件的最后说明

  • keydown - 在按下一个键后立即触发一次。可用于防止第一个默认事件。
  • keypress - 按下按键时可能多次触发。可用于防止默认行为(keydown仅触发一次,如果按住键,将发生默认行为,除非您定义keypress事件)
  • keyup - 在密钥释放后触发。使用event.preventDefault()无法阻止键盘输入修改文本。

答案 1 :(得分:1)

它正在工作......

$("#seltxt").live("keyup", function(event) {
   $('#' + objid).text($(this).val());
});