当我按下特定输入字段上的回车键时,如何从运行中取消jquery提交?
这样的事情:
var $canSubmit = true;
$('#profile_form')
.keyup(function(e){
if (e.keyCode == 13 && e.srcElement.name == 'countrySearch') {
$canSubmit = false;
} else
$canSubmit = true;
})
.on('submit', function(e){
e.preventDefault();
console.log(e);
if (!$canSubmit) return false;
// first time enter is clicked when on countrySearch this is run as submit runs before keyup
// i want all code here not to run when enter is clicked on input[name="countrySearch"]
});
答案 0 :(得分:2)
您应该使用按键而不是键盘和e.target.name
var $canSubmit = true;
$('#profile_form').keypress(function(e) {
if (e.keyCode == 13 && e.target.name == 'countrySearch') {
$canSubmit = false;
} else {
$canSubmit = true;
}
}).on('submit', function(e) {
if (!$canSubmit) {
return false;
} else {
alert('this would submit');
}
});
答案 1 :(得分:0)
由于您正在使用jQuery,我认为您应该使用e.which
来获取密钥代码。我可能错了,但我认为这提供了比e.keyCode
更多的跨浏览器解决方案。
无论如何,这是你要求的:
$('[name=countrySearch]')
.keydown(function(e){
if (e.which == 13) {
e.preventDefault();
}
});
我认为你实际上想要绑定到keydown
或keypress
事件而不是keyup
,但我也可能错了:)无论如何,而不是做你的e.srcElement.name
检查,您只需将事件绑定到countrySearch
元素本身即可。然后,如果密钥代码最终为13,则只是阻止默认操作(在这种情况下,将提交表单)。无需设置一个凌乱的全局变量,在submit
事件被触发时会被检查,因为submit
事件根本不会被触发!