使用jQuery ajax post覆盖表单提交事件

时间:2015-05-01 22:31:02

标签: jquery ajax asp.net-mvc razor

我认为我正在覆盖表单正确提交。但是,//HIDE FORM事件中的done不是@using(Html.BeginForm("Action", "Controller", FormMethod.Post, new{}) { //Form inputs <button type="submit" class="button-submit">Submit</button> } ,而是获取POST的json字符串(如果提交按钮位于表单之外,它可以正常工作,但我在表单中需要它。)

表格

$('.button-submit').bind('submit', function(e) {
    e.preventDefault();

    if (formIsValid) {
        $.ajax({
            url: 'controller/action',
            type: 'POST',
            data: form.serialize()
        }).done(function(data) {
            if (data.success) {
                //HIDE FORM
            } else {
                //error
            }
        });
    }
    return false;
});

脚本(在init()中):

[HttpPost]
public JsonResult Action(Model model)
{
    if (ModelState.IsValid)
    {
        //Code...
    }
    return Json(model);
}

在控制器

var active = $('nav ul li');

active.focus(function() {
    $(this).children('ul').toggleClass('active');
})

如何在表单中保留提交按钮,使用ajax帖子,然后返回隐藏表单并保持在同一页面上?

1 个答案:

答案 0 :(得分:3)

变化:

$('.button-submit').bind('submit', function(e) {

要:

$('.button-submit').on('click', function(e) {

绑定不起作用的原因是您将按钮绑定到提交事件。如果您想使用提交事件,则需要将其绑定到表单才能正常工作。

  

当用户尝试提交表单时,会将提交事件发送给元素。它只能附加到<form>元素

$('form').on('submit', function(e) {

这也可行。但请注意,自jQuery 1.7起,使用on代替bind最佳做法