jQuery $ .post不会传递按下的按钮

问题描述

| 最近,我遇到了一个问题,即$ .post不发送有关已按下按钮的信息。 即我们有一个带有两个按钮的表格。
<form method=\"post\"  action=\"/home/index\">

  <input type=\'hidden\' name=\'data1\' value=\'value1\' />

  <button name=\"button1\" type=\"submit\">First</button>
  <button name=\"button2\" type=\"submit\">Second</button>

</form>

$(document).ready(function() {
    $(\'#formId\').submit(function () {
        var f = $(this);
        var action = f.attr(\"action\");
        var serf = f.serialize();
        $.post(action,serf,//onreturn
          function (data) {
                //do something here on success
              },\'json\'
          );
        return false;
      });
});
如果用户按下第一个按钮,则不带ajax表单的发布如下:data1 = value1&button1 但是当我使用$ .post发布表单时,它不包含有关按钮的任何信息:data1 = value1 jQuery 1.6.1 行为取决于所按下的按钮。 任何帮助或解决方法都将是适当的!     

解决方法

        由于您要停止浏览器的默认行为(即提供按钮值的原因),因此您必须捕获按下的按钮,然后将该信息添加到要发布的数据中(“ѭ1”数据)。可能最可靠的方法是钩住按钮上的
click
事件以及表单的
submit
事件,并将它们全部路由到一个中心函数,该中心函数使用(或不使用)按钮值(不在表单提交的另一种方式,而不是按这些按钮之一)。 遵循以下原则:
$(document).ready(function() {
    function submitTheForm(f,button) {
        var action = f.attr(\"action\");
        var serf = f.serialize();
        if (button && button.name) {
            serf += \"&\" + encodeURIComponent(button.name);
            if (button.value) {
                serf += \"=\" + encodeURIComponent(button.value);
            }
        }
        $.post(action,serf,//onreturn
          function (data) {
                //do something here on success
          },\'json\'
        );
    }
    $(\'#formId\').submit(function () {
        submitTheForm($(this));
        return false;
    });
    $(\"#formId :submit\").click(function() {
        submitTheForm($(this).closest(\'form\'),this);
        return false;
    });
});
    ,        我不认为这正在发生。但是无论如何,您也可以这样。
$(\"#formid\").children(\"input[type=\"submit\"]\").click(function() {
    var name = $(this).attr(\"name\");
    post(name);
    return false;
});
function post(buttnname) {
    var action = $(\"#formid\").attr(\"action\");
    var serf = $(\"#formid\").serialize()+\"&button=\"+buttname;
    $.post(action,//onreturn
        function (data) {
            //do something here on success
          },\'json\'
        );
}