Javascript 提交中的jquery未正确处理,event.preventDefault()不工作

Javascript 提交中的jquery未正确处理,event.preventDefault()不工作,javascript,jquery,Javascript,Jquery,我用下面的HTML(在模态窗口中使用bootbox.js)得到了表单 但当我在#phrase_fld输入字段中按enter时,我会重新加载html页面,并在浏览器中将?dialog_field=some+new+phrase查询字符串附加到我的url中。可能e.preventDefault()不起作用?在我的控制台中,我看到isDefaultPrevented:f。任何关于如何解决这个问题的想法都是受欢迎的。谢谢。表单提交不会作为keyup事件的默认行为触发。为时已晚 您需要在keydown或k

我用下面的HTML(在模态窗口中使用bootbox.js)得到了表单


但当我在
#phrase_fld
输入字段中按
enter
时,我会重新加载html页面,并在浏览器中将
?dialog_field=some+new+phrase
查询字符串附加到我的url中。可能
e.preventDefault()
不起作用?在我的控制台中,我看到
isDefaultPrevented:f
。任何关于如何解决这个问题的想法都是受欢迎的。谢谢。

表单提交不会作为
keyup
事件的默认行为触发。为时已晚

您需要在
keydown
keypress
事件期间捕获它。

尝试以下代码:

$('body').delegate('#phrase_fld', 'keypress', function(e) {
        if(e.keyCode === 13) {
            e.preventDefault();
            console.log(e);
            $(this).parent().parent().parent().parent().parent().find('button.btn-success').trigger('click');
        }     
});

相关:请注意,您可以使用该方法而不是几个
parent
调用。是的,但是为什么
keyup
事件不能正常工作?如果我对它们使用
keypress
keydown
preventDefault()
,我看不到输入字段中输入的文本。尽管
enter
点击被处理properly@Masha-因为太晚了。它在按键效果出现后运行。如果按A键,它将键入A;如果按Enter键,它将提交表单。如果阻止按A键,则不会键入A。如果阻止按Enter键,则不会提交表单。Keyup没有默认行为,因此没有什么可防止的。@Masha它按预期的方式工作。在提交表单之前,浏览器会等待并执行事件处理程序。
delegate
不受欢迎。这更像是一个发现差异的游戏,而不是一个答案。
$(document).on('keyup', '#phrase_fld', function(e){
    e.preventDefault();
    e.stopPropagation();
    console.log(e);     
    if(e.keyCode == 13){                    
      $(this).parent().parent().parent().parent().parent().find('button.btn-success').trigger('click');
     }
 });
$('body').delegate('#phrase_fld', 'keypress', function(e) {
        if(e.keyCode === 13) {
            e.preventDefault();
            console.log(e);
            $(this).parent().parent().parent().parent().parent().find('button.btn-success').trigger('click');
        }     
});