为什么event.preventDefault()和'return false'都不会停止我的AJAX表单提交操作?

时间:2013-12-10 15:08:37

标签: javascript jquery ajax forms symfony

当我使用AJAX提交表单时,event.preventDefault()的jQuery不起作用。

以下是我的HTML代码:

<form method="post" action="my_post_create_url" id="post-form">
    <textarea id="post-text" placeholder="Compose a new post"></textarea>
    <button type="submit" id="submit-post">Post</button>
</form>

这是我的jQuery代码:

$('#post-form').submit(function(e) {    
    e.preventDefault();
    var url = $(this).attr("action");
    $.ajax({
        type: "POST",
        url: url, // 'my_post_create_url'
        data: $(this).serialize(),
        dataType: "html",
        success: function(msg){

            alert("Success!");

        }
    }); 
});

以下是我在控制器中处理它的方法:

public function createAction(Request $request){
    // some code here ...
    $form->handleRequest($request);
    if ($form->isValid()) {
        // some code here ...
        // ... then redirection 
    }
    return $this->render(...)
}

我甚至在jQuery代码的末尾尝试了'return false',但它仍然重定向我:(

编辑1:

似乎$('#post-form').submit(function(e)在Chrome和Safari上都没有触发任何进一步的帮助?

编辑2:

我已删除了基本HTML文件中的一些javascript文件,现在它可以在所有浏览器中正常运行。问题出在我的js文件中的其他地方。

1 个答案:

答案 0 :(得分:1)

嗯,问题来自window.popsate,其行为有所不同,具体取决于Chrome(和Safari)或Firefox(和Opera),这是我的一个js文件中存在问题的行:

$(window).on("popstate", function(e) { ... });

对于那些面临同样问题的人来说,这里有一些问题的答案: Popstate on page's load in Chrome