文本显示延迟

use*_*330 12 html javascript

我希望我立即在文本字段中输入的文本显示在div中:

function func() {
  document.getElementById("query").innerHTML = document.getElementById("keyword").value;
}
window.onload = function() {
  keyword.onkeydown = function(e) {
    func();
  }
}
Run Code Online (Sandbox Code Playgroud)
<input type="text" id="keyword" size="40">
<div id="query"></div>
Run Code Online (Sandbox Code Playgroud)

它的工作原理,唯一的问题是,它会延迟显示.

所以,如果我输入"abc",它只显示"ab".我需要输入另一个字符,例如"abcd",以便显示"abc".
最后一个角色总是丢失.

在这里你可以尝试一下:http://jsfiddle.net/285cz0np/

Jos*_*ier 15

该事件正在被解雇onkeydown.由于input元素的值尚未更改,因此您没有看到结果.

您可以将其更改为onkeyup:( 更新示例).或者您可以在调用函数之前设置延迟.


或者,您也可以听取此input事件:

这里的例子

document.getElementById("keyword").addEventListener('input', function (e) {
    document.getElementById("query").textContent = e.target.value;
});
Run Code Online (Sandbox Code Playgroud)

  • `input`也很好,因为它在与文本更改相关的其他情况下被触发.如语音输入,粘贴或自动化. (4认同)

Ami*_*ein 6

问题是因为输入文本值,在释放密钥之前不会更改.通过使用setTimeout你让浏览器更新值,然后再运行你的函数(func)

我建议不要改变onkeyup,因为你想要onkeydown,这个解决方案仍然可以使用该onkeydown事件

keyword.onkeydown = function (e) {
        setTimeout(func,0)
    }
Run Code Online (Sandbox Code Playgroud)

更新示例jsFiddle:http://jsfiddle.net/285cz0np/1/

我建议你换成input活动.例如,如果用户从剪贴板粘贴(仅使用鼠标),则不会触发您的事件.


Nic*_*ber 5

这是因为触发该函数的事件是onkeydown,因此当按下该键时,该函数将读取文本区域的值.此时它读取数据,按下的键尚未添加到实际值中.

一个简单的解决方法是将事件更改为,onkeyup因为当键处于up状态时,该键的值将被添加到该值.

window.onload = function () {
    keyword.onkeyup = function (e) {
        func();
    }
}
Run Code Online (Sandbox Code Playgroud)