如果我最初将值“a”传递给输入框,则会触发按键事件,但它不会在其中提供值。但如果我再次将第二个值“b”传递给输入框,则它再次触发按键事件,但它不会给出当前值(b在这种情况下为当前输入),而是将前一个值作为输出。 ================================================== =========================
<!DOCTYPE html>
<html>
<head>
<title>stop Propagation</title>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<button id="myBtn">click me </button>
<div class="test">
<h1>click this</h1>
</div>
<input type="text">
</div>
<script type="text/javascript" src="stopPro.js"></script>
</body>
</html>`
Java脚本 - (stopPro.js) - &gt;这里
$("input[type='text']").click(function(event)
{
event.stopPropagation();
}
);
$("input[type='text']").keypress(function()
{
console.log("key pressed");
console.log(this.value);
}
);
答案 0 :(得分:0)
这是操作顺序的问题。
在按下键时会触发 keypress
(尽管jQuery API指出,这种行为因浏览器而异)。因此,当触发console.log
时,输入的值实际上尚未更新。我已经更新了我的示例中的keypress
事件,通过查看event
以查看按下了哪个键来显示使用它的有用方法。
相反,为了检查输入的值,您可以使用keyup
,它会在用户释放键盘键时触发,并在键入键后触发。
$("input[type='text']").click(function(event) {
event.stopPropagation();
})
.keypress(function(event) {
console.log('keypress (key)', event.key);
})
.keyup(function() {
console.log('keyup (value)', this.value);
});
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<div class="container">
<button id="myBtn">click me </button>
<div class="test">
<h1>click this</h1>
</div>
<input type="text">
</div>