jQuery如何在表单提交上找到按钮值

时间:2010-06-23 07:01:20

标签: jquery ajax

我有一个基本的简报注册表单,其中包含一个电子邮件字段和两个按钮(订阅和取消订阅)。 我想将按钮值作为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>

修改 我通过在按钮上使用click事件并使用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 个答案:

答案 0 :(得分:2)

在按钮上使用单击处理程序而不是表单上的提交处理程序。将this.value添加到您发送到服务器的数据中。

答案 1 :(得分:2)

为什么不直接使用click处理程序并创建自己的对象,因为您只有两个要发送的字段,这不应该是个问题;

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

data.serialize();