尝试使用jQuery通过DOM访问修改input值时出现val方法undefined报错
报错原因定位
- 代码调用链中不存在
child方法:jQuery选取直接子元素的内置方法为children(),没有无s后缀的child实例方法。$(tds[0])是匹配到第一个表格单元格的jQuery实例,执行到$(tds[0]).child时返回值为undefined,后续调用val()方法就会触发Cannot read property 'val' of undefined的报错。 - 目标元素选取逻辑偏差:代码初衷是给单元格内新渲染的input赋值,但绕开了jQuery的元素选取规则,没有正确定位到单元格内部的input节点。
可行实现方案
- 生成input时直接嵌入value值(最高效,无需后续额外选元素操作)
let tr = $(this).parent().parent(), tds = tr.children(); $(tds[0]).html(`<input type='text' name='name' value='${name}' />`);
- 先渲染input再单独赋值(使用
find()在单元格范围内定位input节点)
let tr = $(this).parent().parent(), tds = tr.children(); $(tds[0]).html(`<input type='text' name='name' />`); $(tds[0]).find('input').val(name);
- 直接创建带属性的input对象再挂载到单元格内
let tr = $(this).parent().parent(), tds = tr.children(); $('<input>', { type: 'text', name: 'name', value: name }).appendTo($(tds[0]).empty());
注意事项
如果坚持想通过取单元格直接子节点的方式获取input,需要切换为原生DOM访问逻辑,即通过tds[0].children[0]拿到原生DOM节点,再转为jQuery对象调用方法:$(tds[0].children[0]).val(name)。这种写法容错性差,一旦单元格内存在文本节点、占位符或者其他元素,很容易取错目标节点,不建议作为优先方案。
内容的提问来源于stack exchange,提问作者John Hendrickson
相关产品推荐
相关产品推荐

