JQuery - как получить значение ввода типа submit при ajaxification формы - PullRequest
3 голосов
/ 08 февраля 2011

Предположим, у меня есть следующий код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd"
    >
<html lang="en">
<head>
    <title><!-- Insert your title here --></title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function(){
            $('#form1').submit(function(){

                // Let's see the values
                alert($(this).serialize());

                $.post($(this).attr('action'), $(this).serialize(), function(data){

                    // Do something on callback

                });

                return false;
            })
        });

    </script>
</head>
<body>
    <form action="http://example.com/bla" method="POST" id="form1">
        <input type="hidden" name="ipt1" value="1"/>
        <input type="submit" name="sbt" value="2"/>
    </form>
</body>
</html>

Когда я сериализирую значения формы, значение входного типа, отправленного нажатием, отсутствует.Как мне справиться с такой ситуацией, когда я изменяю форму?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

В не-ajax-формах значение кнопки отправки отправляется только с формой, если она нажата.Поэтому, если вы хотите имитировать это поведение с помощью ajax, вы должны сделать это примерно так:

$("#submit_button").click(function() {
    var data = $("#my_form").serialize();
    data += data.length ? "&" : ""; // check if empty
    data += escape($(this).attr("name"))+"="+escape($(this).val());
    // ...
    return false;
});

Это добавляет сериализованные данные кнопки отправки к сериализованным данным формы.

1 голос
/ 08 февраля 2011

Это по замыслу.метод .serialize() не сериализует входные данные типа submit.

К сожалению, если вы используете его, вы не сможете получить доступ к источнику события.Лучше всего связать все отправленные сообщения и добавить исходные данные, например:

$('input:submit').bind('click', function(){    

var data = $("#form1").serialize();
data += "&"+escape($(this).attr("name"))+"="+escape($(this).val());

alert(data);
$.post($('#form1').attr('action'), data, function(data) {
//do something
});

return false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...