JQuery, как найти значения кнопок при отправке формы - PullRequest
2 голосов
/ 23 июня 2010

У меня есть базовая форма подписки на новостную рассылку с полем электронной почты и двумя кнопками (подписаться и отписаться).Я хочу передать значение кнопки как часть данных ajax, но .serialize () не включает значения кнопки, поскольку они относятся к событию.

Вот мой код: Javascript:

$('#newsletter_form').submit(function() {
    $.ajax({
        type:'POST',
        url:'/newsletter',
        data: $(this).serialize(),
        dataType:'json',
        success: function(data) {
            if(data['status'] == true) {
                alert(data['status']);
            }
            else {
                alert(data['error']);
            }
        }
    });
    return false;
});

HTML:

 <form id="newsletter_form"action="/newsletter/" method="post">
                <input type="text" name="email" value="Email Address" class="toggle"/>


                <button class="btn_grey" name="submit" type="submit" value="subscribe"><span>Subscribe</span></button>
                <button class="btn_grey" name="submit" type="submit" value="unsubscribe"><span>Unsubscribe</span></button>
   </form>

Редактировать Я исправил это с помощью события нажатия кнопки и использования parent (). Serialize () плюс attr ("value") длязапрос данных.

 $('#newsletter_form button').click(function() {
        $.ajax({
            type:'POST',
            url:'/newsletter',
            data: $(this).parent('form').serialize() + '&submit='+ $(this).attr("value"),
            dataType:'json',
            success: function(data) {
                if(data['status'] == true) {
                    alert(data['status']);
                }
                else {
                    alert(data['error']);
                }
            }
        });
        return false;
    });

Ответы [ 2 ]

2 голосов
/ 23 июня 2010

Почему бы просто не использовать вместо этого обработчик кликов и создать свой собственный объект, поскольку у вас есть только два поля, которые вы хотите отправить, это не должно быть проблемой;

var data = {
    'email': $('input[name="email"]').val(),
    'submit': $(this).val()
}

data.serialize();
2 голосов
/ 23 июня 2010

Используйте обработчики кликов на кнопках вместо обработчиков отправки в форме.Добавьте this.value к данным, которые вы отправляете на сервер.

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