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

问题描述 投票:2回答:2

在我的表单中,我添加了一个文本框($("#seltxt"))和一个包含文本的div。当我选择div文本出现在文本框中时,此方法工作正常。现在,我将文本框文本复制到div中的#seltxt中的按键事件中添加了按键功能。但是它少了一个角色。

示例:

当我单击div时,文本为“ manojgangwar”的div,“ manojgangwar”复制到#seltxt。现在假设我在文本框中输入字符“ manojgangwar123”,然后在div中仅出现“ manojgangwar12”

下面是捕获keypress事件的jQuery:

 //function to set text to div

$("#seltxt").keypress( function(event) {
   $('#' + objid).text($("input#seltxt").val());
});
javascript jquery keypress jquery-events
2个回答
6
投票

在发生默认行为之前,按下键时会触发keypress事件。这允许脚本通过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
投票

正在工作...

$("#seltxt").live("keyup", function(event) {
   $('#' + objid).text($(this).val());
});
© www.soinside.com 2019 - 2024. All rights reserved.