JavaScript输入和输出之间的一个(按键)事件延迟
One-( keypress-)event-delay between javascript input and output
以下代码片段使用简单的javaScript和jQuery重现网页中的输入文本。
不过,我想知道为什么输入和输出之间有一个字符(或者更准确地说:一个击键)延迟
例如:
-
我输入"abcde"
-
输出为"ABCD"
-
但是,如果我按插入键,最终的"e"打印。
我的代码 :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<input type="text" name="enteredText" id="myTextInput" />
<p id="myTextOutput">
blabla
</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$("#myTextInput").keypress(function( ){
var theText = $("#myTextInput").val();
$("#myTextOutput").html(theText);
});
$( "html" ).click(function( event ) {
var value = $("#myTextInput").val();
$("#myTextOutput").html(value);
});
</script>
</body>
</html>
知道吗?谢谢
如果你想摆脱tat延迟。 使用 keyup
或 keydown
代替 keypress
:
$("#myTextInput").keyup(function( ){
var value = $("#myTextInput").val();
$("#myTextOutput").html(value);
});
这是演示
最可能的原因是keypress
事件处理程序是在更新输入字段的内容之前执行的。当您阅读内容时,您仍然阅读旧内容,而不是更新的内容。
来自jQuery的keypress
文档:
注意:由于任何官方规范都没有涵盖按键事件,因此使用它时遇到的实际行为可能因浏览器、浏览器版本和平台而异。
改用keyup
可以解决此问题:
$("#myTextInput").keyup(function() {
var theText = $("#myTextInput").val();
$("#myTextOutput").html(theText);
});
$("html").click(function(event) {
var value = $("#myTextInput").val();
$("#myTextOutput").html(value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="enteredText" id="myTextInput" />
<p id="myTextOutput">
blabla
</p>
在允许事件传播到文本字段更新的位置之前,您正在获取该值。 您可以添加无穷小的延迟来获取完整值:
$("#myTextInput").keypress(function( ){
setTimeout(function() {
var value = $("#myTextInput").val();
$("#myTextOutput").html(value);
}, 0);
});
相关文章:
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 使用向下箭头键(与tab键一样)聚焦下一个输入
- 如何将键入的文本从一个输入类型的文本复制到另一个
- 在另一个输入后在Javascript中添加值
- 仅对一个输入按钮禁用应用
- 使用reactjs setState回调获取上一个输入值的计算值
- 当阻止Enter键提交AJAX表单时,关注下一个输入是't工作
- JavaScriptHtml从一个输入中获取值
- 如何将src的值放在一个输入中,然后在另一个页面上显示它
- 当一个输入与另一个输入的 ID 具有相同的名称时的含义
- jQuery将输入集中在下一个tr->td时,td包含一个输入字段,但从不关注html选择
- 使用一个输入作为两个按钮的值
- 将一个html表转换为json对象并将其发送到php页面,该表有一个输入字段
- 将文件插入到另一个输入的输入
- 如何将一个输入栏推开
- 多个输入,用户只能在其中一个输入中输入
- 使用Jquery Keyup函数将变量从一个输入字段传递到另一个
- Chrome(Android)键盘将单词转移到js焦点更改的下一个输入
- 使用JQuery将焦点更改为粘贴事件后的下一个输入
- jQuery:在除一个输入文本字段之外的所有文档上激发keyup