我有
的骨干视图 "submit": 'handleForms'
在其事件中哈希。
handleForms定义如下:
handleForms: function(e){
$(e.target).ajaxSubmit({
beforeSubmit: function(arr, $form, options){
console.log('hello');
}
});
return false;
},
我的一个表单有多个提交按钮:
<button type="submit" class="zone Empty" name="zone" value="14"> [14]: Empty </button>
“区域”未显示在提交给服务器的参数中。根据“成功控制”文档的第二个子弹(http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2),我希望发送zone = 14。
我已经看到了人们以编程方式提交表单的其他SO问题,因此缺少提交值,但这是用户启动时点击按钮。
jquery.form不应该在序列化中包含这个值吗?有没有办法让它这样做,或者我将不得不手工捕捉表格元素?
答案 0 :(得分:2)
问题与jQuery serialize()
方法有关,该方法在docs中说明:
注意:只有“成功控件”被序列化为字符串。没有提交按钮值被序列化,因为表单未使用按钮提交。
我认为他们的意思是说不是通过浏览器默认方法提交的
http://api.jquery.com/serialize/
您可以通过在表单中为每个提交附加隐藏字段来创建变通方法。
beforeSubmit: function(arr, $form, options) {
$form.find(':submit').each(function() {
/* check if hasn't been added already on prior submit attempt*/
if(!$form.find('input[type="hidden"][name = "' + this.name + '"]').length) {
/* add hidden field*/
$form.prepend('<input type = "hidden" name = "' + this.name + '" value = "' + this.value + '" / > ');
}
})
}
编辑至仅发送已删除的按钮:
$('#formID :submit').click(function(){
$('#formID :submit').removeClass('activeButton');
$(this).addClass('activeButton');
})
beforeSubmit: function(arr, $form, options) {
$form.find(':submit.activeButton').each(function() {
/* check if hasn't been added already on prior submit attempt*/
if(!$form.find('input[type="hidden"][name = "' + this.name + '"]').length) {
/* add hidden field*/
$form.prepend('<input type = "hidden" name = "' + this.name + '" value = "' + this.value + '" / > ');
}
})
}
答案 1 :(得分:1)
这个怎么样(不涉及beforeSubmit
):
首先,对表单中的隐藏字段进行硬编码:
<input type="hidden" name="submitType" id="submitType">
然后,在js:
$form.on('click', "button[type='submit']", function() {
$("#submitType").val(this.value);
});
答案 2 :(得分:0)
我针对此问题略有改进的代码段,如果它还不存在,会动态注入相应的input:hidden
标记,然后从点击的button
或{{1 }}。
该方法在执行时间上应该是安全的,因为在input:submit
气泡到Submit
之后会触发Click
事件。
document