jQuery:keyup上的输入值丢失了吗?
我有一个简单的表单,当用户在输入字段上按enter(return)时,我想提交它(即激发ajax)。如果我按下submit按钮,事件将正常触发,但当使用keyup触发完全相同的函数时,输入字段的值为空。我尝试使用$(this.val())传递输入字段的值(来自keyup函数),但传递的参数仍然为空 更新II:问题仅在初始加载时出现。点击“刷新”按钮后,事件将按预期触发。在铬和FF中测试 试试这个:jQuery:keyup上的输入值丢失了吗?,jquery,Jquery,我有一个简单的表单,当用户在输入字段上按enter(return)时,我想提交它(即激发ajax)。如果我按下submit按钮,事件将正常触发,但当使用keyup触发完全相同的函数时,输入字段的值为空。我尝试使用$(this.val())传递输入字段的值(来自keyup函数),但传递的参数仍然为空 更新II:问题仅在初始加载时出现。点击“刷新”按钮后,事件将按预期触发。在铬和FF中测试 试试这个: $(document).ready(function(){ // make sure DOM i
$(document).ready(function(){ // make sure DOM is ready to be manipulated
// ...
$('#pin').keyup(function(e) {
if (e.which == 13) {
getKeyAjax();
e.preventDefault() // prevents form from being submitted
}
});
// ...
})
我在你的小提琴上注意到了一件可能是导致这一切的事情。在使用表单字段时,我注意到有时我会收到一个通知,说明“仅限4位数字”,而通常我不会。这里的问题是您的
表单
标签。按enter键会触发浏览器的默认行为:非ajax表单提交。如果在运行$.GET
之前执行此操作,则它将与您描述的行为一致,刷新后js将被缓存,然后可能会更快地进行计算,允许在提交和刷新之前执行$.GET。这只是一个理论,但最终留给你两个选择:
标记$('form').on('submit',函数(e){e.preventDefault();})代码>
可以这样做。2#覆盖onsubmit
事件以防止默认提交(允许保留表单标记)
无论这是否解决了您要解决的问题,您的脚本都需要它。它将是在表单中输入时执行ajax的关键
在上面拉小提琴。行为现在是一致的。这里似乎运作良好,对吗?()我忘了提到它确实有效,但只是有时(大多数情况下,不是)。这反过来又使得找出问题所在变得更加困难。到目前为止,我只在Chrome和FF中进行了测试。嗯,你能用你的HTML和JS在jsfiddle.net上设置一个提琴吗?@KGChristensen我很确定你没有将你的jQuery代码包装在
$(document.ready()
)中。它在doc.ready中-请参阅下面的注释以回答。@KGChristensen你是否使用$(document.ready()
,在DOM准备好被操作之后?我已经尝试了这两种方法(只是为了见鬼),现在它驻留在doc.ready中。小更新:它现在似乎在Chrome中工作(在添加Raminson的建议和强制清理Tomcat之后…)。Firefox中没有运气。非常好-非常好的回复和解释。我同意建议2,现在可以在所有目标浏览器上使用。
$(document).ready(function(){ // make sure DOM is ready to be manipulated
// ...
$('#pin').keyup(function(e) {
if (e.which == 13) {
getKeyAjax();
e.preventDefault() // prevents form from being submitted
}
});
// ...
})