如何排除指定input元素不被jQuery的serializedArray()方法序列化?
问题分析与解决办法
问题根源
- 你后续重新赋值的
formObject是serializeArray()返回的数组,并非普通对象,所以用formObject.rowId无法获取值——数组靠索引访问,不支持属性名调用。 - 你的
rowId输入框value为空,而选择器:input[value!='']直接将其排除,导致序列化后的数组里根本没有rowId这一项。
解决步骤
方法一:先保存rowId,再合并到序列化结果里
先把初始的rowId值存下来,再调整序列化规则确保它被包含,最后合并到结果中:
function handleFormSubmit(formObject) { // 先保存初始的rowId值 const rowIdValue = formObject.rowId; console.log(rowIdValue); // 序列化表单,保留rowId(去掉空值过滤,或者针对性保留rowId) var formData = $("#myForm :input[value!=''], #myForm #rowId").serializeArray(); // 添加myfile字段 formData.push({ name: 'myfile', value: myfile }); // 从数组中获取rowId值 const rowIdItem = formData.find(item => item.name === 'rowId'); console.log(rowIdItem ? rowIdItem.value : '未找到rowId'); google.script.run.withSuccessHandler(createTable).processForm(formData); setTimeout(function() {$('#myModal').modal('hide');}, 3000); document.getElementById("message").innerHTML = "<div class='alert alert-warning' role='alert'>Data added/updated successfully.</div>"; document.getElementById("myForm").reset(); }
方法二:将序列化数组转为对象,方便属性访问
如果习惯用对象形式操作数据,可以把序列化结果转为普通对象:
function handleFormSubmit(formObject) { const rowIdValue = formObject.rowId; console.log(rowIdValue); // 序列化表单并转为对象 const formArray = $("#myForm :input[value!=''], #myForm #rowId").serializeArray(); const formData = formArray.reduce((obj, item) => { obj[item.name] = item.value; return obj; }, {}); // 确保rowId和myfile字段存在 formData.rowId = rowIdValue; formData.myfile = myfile; console.log(formData.rowId); // 现在可直接通过属性获取值 google.script.run.withSuccessHandler(createTable).processForm(formData); setTimeout(function() {$('#myModal').modal('hide');}, 3000); document.getElementById("message").innerHTML = "<div class='alert alert-warning' role='alert'>Data added/updated successfully.</div>"; document.getElementById("myForm").reset(); }
额外说明
选择器$("#myForm :input[value!=''], #myForm #rowId")的作用是:过滤掉其他空值输入框,但强制保留rowId元素,兼顾你的“排除空值”和“保留rowId”需求。
内容的提问来源于stack exchange,提问作者Potatou_
相关产品推荐
相关产品推荐

