我有一个简单的表单,当用户按下输入字段上的enter (返回)时,我想提交这个表单(即fire )。如果我按下submit按钮,事件就会很好地触发,但是当使用keyup触发完全相同的函数时,输入字段的值是空的。我尝试使用$(this).val(),传递输入字段的值(从keyup函数),但是传递的param仍然是空的。
更新II:问题仅在初始加载时发生。按下点击后,按预期触发事件。在Chrome和FF中测试。
// Value of #pin is blank in getKeyAjax()
$('#pin').keyup(function(e) {
if (e.keyCode == 13) {
console.log('DEBUG: Keypress detected (13)')
getKeyAjax();
}
});
// Value of #pin is correct in getKeyAjax()
$('#btnPwdCreate').click(function() {
getKeyAjax();
});
function getKeyAjax() {
console.log('DEBUG: Starting ... getKeyAjax()');
var txtPin = $('#pin').val();
console.log('DEBUG: Value of txtPin: ' + txtPin);
.
.
.
}
发布于 2012-07-15 07:41:39
我注意到在你的小提琴上有一件事可能是造成这一切的原因。在使用表单字段时,我注意到有时我收到一个警告,上面写着“只有4位数字”,而通常我没有。问题在于您的form
标记。点击enter会触发浏览器的默认行为:非ajax表单提交。如果这在您的$.GET
运行之前完成,它将与您描述的行为保持一致,在刷新js缓存之后,然后可能会在提交和刷新发生之前进行更快的评估,从而允许$.get。这只是一个理论,但最终它给你留下了两个选择:
<form>
标记。$('form').on('submit', function(e){e.preventDefault();});
1#将产生不默认提交的效果,因为没有<form>
可以这样做。2#重写onsubmit
事件以防止默认提交(允许保留表单标记)。
无论这是否解决了您所追求的问题,无论您的脚本如何,都需要它。它将是执行ajax的关键,同时在表单中输入enter。
小提琴在上面。行为现在是一致的。
发布于 2012-07-15 05:44:02
试试这个:
$(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
}
});
// ...
})
https://stackoverflow.com/questions/11492367
复制