我有一个表单,其中包含每个公司产品的大约一百个输入/文本字段。该表单将在一天结束时填写,记录每种产品销售的数量。
如何让表单仅传递相对较小的子集字段,而这些字段不为空?
我不是在寻找表单验证。用户可以在任何输入字段中输入或不输入值;但是,我只想将确实输入了值的输入字段包括在表单传递的POST中。
谢谢
我有一个表单,其中包含每个公司产品的大约一百个输入/文本字段。该表单将在一天结束时填写,记录每种产品销售的数量。
如何让表单仅传递相对较小的子集字段,而这些字段不为空?
我不是在寻找表单验证。用户可以在任何输入字段中输入或不输入值;但是,我只想将确实输入了值的输入字段包括在表单传递的POST中。
谢谢
提交前,将所有空字段设置为禁用的一种方式,例如:
function disableEmptyInputs(form) {
var controls = form.elements;
for (var i=0, iLen=controls.length; i<iLen; i++) {
controls[i].disabled = controls[i].value == '';
}
}
并将其运行在表单提交侦听器上:
<form onsubmit="disableEmptyInputs(this)" ...>
window.onload = function() {
document.getElementById('formID').addEventListener('submit', function() {
Array.prototype.forEach.call(this.elements, function(el) {
el.disabled = el.value == '';
});
}, false);
};
if (controls[i].value == '') controls[i].disabled = true
。 - Jacob Garby这是我使用 JQuery 实现的方法:
$("#myform").submit(function (event) {
event.preventDefault();
var dataArr = {};
$.each($("form > input[name]"), function (key, value) {
if ($(this).val() != "") {
dataArr[$(this).attr('name')] = $(this).val();
}
});
$.post($(this).attr('action'), dataArr);
alert("Form submitted!");
});
以上代码的作用:
$("#my-form").submit(function() {
$(this).find(":input").filter(function () {
return !this.value;
}).attr("disabled", true);
return true;
});
这里是使用 JQuery 的解决方案
HTML
<form id="myForm">
<input name="1" type="text" / >
<input name="2" type="text" / >
<input name="3" type="text" / >
<input name="4" type="text" / >
<button id="sub">Submit</button>
</form>
JS
(function(){
$('#sub').click(function(e){
e.preventDefault();
var data = $('form input').filter(function(index,ele){
return $(ele).val()!= '';
}).serialize();
console.log(data)
})
})()