使用两个提交按钮提交jQuery ajax表单

wor*_*ogy 21 forms ajax jquery input submit

我有一个看起来像这样的表单:

<form action="/vote/" method="post" class="vote_form">
    <input type="hidden" name="question_id" value="10" />
    <input type="image" src="vote_down.png" class="vote_down" name="submit" value="down" />
    <input type="image" src="vote_up.png" class="vote_up" name="submit" value="up" />
</form>
Run Code Online (Sandbox Code Playgroud)

当我绑定到表单的submit($("vote_form").submit())时,我似乎无法访问用户单击的图像.所以我试图绑定到点击图像本身($(".vote_down, .vote_up").click()),它总是提交表单,无论我是否尝试

  • 返回false;
  • event.stopPropogation(); 要么
  • event.preventDefault();

因为所有这些都是形式事件.

  1. 我应该将$ .post()附加到form.submit()事件,如果是这样,我如何判断用户点击了哪个输入,或者

  2. 我应该将$ .post()附加到图像点击,如果是这样,我该如何阻止表单提交.

这是我的jQuery代码现在的样子:

$(".vote_up, .vote_down").click(function (event) {
    $form = $(this).parent("form");
    $.post($form.attr("action"), $form.find("input").serialize() + {
        'submit': $(this).attr("value")
    }, function (data) {
        // do something with data
    });
    return false; // <--- This doesn't prevent form from submitting; what does!?
});
Run Code Online (Sandbox Code Playgroud)

wor*_*ogy 29

根据Emmett的回答,我对此的理想解决方法就是用Javascript本身来杀死表单的提交,如下所示:

$(".vote_form").submit(function() { return false; });
Run Code Online (Sandbox Code Playgroud)

这完全奏效了.

为了完整起见,原帖中的一些JS代码需要一点爱.例如,我添加到序列化函数的方式似乎不起作用.这样做:

    $form.serialize() + "&submit="+ $(this).attr("value")
Run Code Online (Sandbox Code Playgroud)

这是我的整个jQuery代码:

$(".vote_form").submit(function() { return false; });
$(".vote_up, .vote_down").click(function(event) {
    $form = $(this).parent("form");
    $.post($form.attr("action"), $form.serialize() + "&submit="+ $(this).attr("value"), function(data) {
        // do something with response (data)
    });
});
Run Code Online (Sandbox Code Playgroud)