jQuery $ .post не передает, какая кнопка была нажата - PullRequest
1 голос
/ 29 мая 2011

Недавно я столкнулся с проблемой, когда $ .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

Поведение зависит от того, какая кнопка была нажата.Любая помощь или обходной путь будет ценным!

Ответы [ 2 ]

3 голосов
/ 29 мая 2011

Поскольку вы останавливаете поведение браузера по умолчанию, которое определяет значение кнопки, вам нужно будет зафиксировать, какая кнопка была нажата, и добавить эту информацию к публикуемым данным (вашим serf данным). , Вероятно, наиболее надежным способом было бы перехватить событие click на кнопках, а также событие submit формы и направить их все в центральную функцию, которая выполняет передачу ajax с (или без) значением кнопки (без отправки формы другим способом, а не нажатием одной из этих кнопок).

Что-то вроде этого:

$(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;
    });
});
0 голосов
/ 29 мая 2011

Я не думаю, что это должно происходить. Но в любом случае, вы тоже можете что-то подобное.

$("#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, serf,
    //onreturn
        function (data) {
            //do something here on success
          },
          'json'
        );
}
...