我有一个基本的简报注册表单,其中包含一个电子邮件字段和两个按钮(订阅和取消订阅)。 我想将按钮值作为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;
});
答案 0 :(得分:2)
在按钮上使用单击处理程序而不是表单上的提交处理程序。将this.value
添加到您发送到服务器的数据中。
答案 1 :(得分:2)
为什么不直接使用click处理程序并创建自己的对象,因为您只有两个要发送的字段,这不应该是个问题;
var data = {
'email': $('input[name="email"]').val(),
'submit': $(this).val()
}
data.serialize();