如何从可克隆表单的按钮所在父表单中获取字段值?
解决可克隆表单中获取字段值的问题
你遇到的核心问题是混淆了原生DOM元素和jQuery对象的用法,同时存在选择器使用错误。下面直接给你正确写法,顺便解释之前的错误:
错误原因分析
- 用
$(this).closest("form")[0]得到的是原生DOM表单元素,它没有jQuery的find()方法,必须用$(原生元素)转成jQuery对象才能调用jQuery方法。 children()只能查找当前元素的直接子元素,而Model字段嵌套在fieldset > ul > li里,不是表单的直接子元素,所以用children()找不到。- 选择器写法错误,比如
"Model"不是有效的选择器,要写成input[name="Model"]或者#Model(该字段有ID,用ID选择器更高效)。
正确写法示例
方法1:单独获取Model字段的值
直接通过表单上下文查找目标字段:
$(".send").on("click", function(e){ e.preventDefault(); alert("Save Button Clicked"); // 获取当前按钮所在的表单(jQuery对象,不要加[0]) var $theForm = $(this).closest("form"); // 查找Model字段并获取值 var modelValue = $theForm.find('input[name="Model"]').val(); // 或者用ID选择器:$theForm.find('#Model').val(); alert("Model值:" + modelValue); });
方法2:一次性获取所有表单字段的键值对
如果需要获取表单里所有字段(包括隐藏字段)的值,用serializeArray()更方便,适合多字段场景:
$(".send").on("click", function(e){ e.preventDefault(); alert("Save Button Clicked"); var $theForm = $(this).closest("form"); // 把表单序列化成数组,每个元素包含name和value var formDataArray = $theForm.serializeArray(); // 转成便于访问的对象 var formData = {}; formDataArray.forEach(function(item) { formData[item.name] = item.value; }); // 可以直接访问任意字段 alert("IDNum: " + formData.IDNum + "\nYear: " + formData.Year + "\nModel: " + formData.Model); });
修正你之前的错误写法
比如你之前的这行错误代码:
// var Model = $(this).closest("form")[0].find('input[name="Model"]').val();
可以改成两种正确形式:
- 去掉
[0],保持jQuery对象:$(this).closest("form").find('input[name="Model"]').val(); - 把原生元素转成jQuery对象:
$($(this).closest("form")[0]).find('input[name="Model"]').val();
内容的提问来源于stack exchange,提问作者Soren
相关产品推荐
相关产品推荐

