如何选择指定div内的input/select元素及修复jQuery change事件失效问题
我来帮你一步步解决这两个问题:
问题1:如何通过ID或类选择单个/多个div内部的所有input和select元素?
你可以通过后代选择器结合选择器分组来实现,这里有几种常用且易维护的写法:
通过ID选择单个div内的目标元素:
如果要选中ID为targetDiv的div下所有层级的input和select,两种写法都可行:// 写法1:直接使用分组选择器 $('#targetDiv input, #targetDiv select') // 写法2:用find()简化代码,可读性更强 $('#targetDiv').find('input, select')通过类选择多个div内的目标元素:
如果要选中所有带有targetClass类的div下的input和select,逻辑类似:// 写法1:直接分组选择器 $('.targetClass input, .targetClass select') // 写法2:用find()批量查找 $('.targetClass').find('input, select')
核心逻辑:逗号,用于选择器分组,可以同时匹配多种元素;空格表示后代选择,会选中该容器下所有层级的目标元素(不管是直接子元素还是嵌套更深的)。
问题2:修复检测
goaldiv内字段change事件的jQuery代码 先拆解你的问题:你想监听id="goaldiv"的div内字段的change事件,但原脚本失效的原因很明确——选择器写错了,结合你的HTML代码,我来帮你修正:
先整理你的HTML结构(方便查看):
<div id="goaldiv"> <div id="mygoaldiv"> <div id="my0Div" class="goalv"> <input type="hidden" value="0" name="hddgoal_id[]" class="goalid"> <div class="col-sm-3 col-md-3 col-lg-3 form-pad-bot"> <select name="goal_id[]" class="form-control " aria-required="true"> <option value=""> Select Goal</option> <option value="1" > vacation</option> <option value="2" > child marriage</option> </select> </div> <div class="col-sm-3 col-md-3 col-lg-3 form-pad-bot"> <input value="" placeholder="Goal Year" class="goal_date form-control inputText" type="text" name="goal_date[]" > </div> </div> </div> </div>
原脚本的两个关键问题:
- 你的HTML里根本没有
id="fhcform"的元素,但你却用了#fhcform作为选择器前缀,导致完全找不到目标元素; - jQuery的
.on()方法第二个参数是上下文/委托选择器,你把第二个选择器#fhcform .goalv select放在这里是错误用法,正确的分组选择器应该写在同一个字符串里。
修正后的代码:
写法1:直接选中静态元素绑定事件
如果你的元素是页面加载时就存在的静态元素,用这种写法即可:
// 选中goaldiv下所有goalv类容器里的input和select $('#goaldiv .goalv input, #goaldiv .goalv select').on('change', function(eve) { alert($(this).val()); });
写法2:事件委托(推荐,支持动态添加的元素)
如果后续会通过JS动态添加.goalv里的input/select,用事件委托更可靠——把事件绑定在父容器#goaldiv上,监听子元素的事件:
$('#goaldiv').on('change', '.goalv input, .goalv select', function(eve) { alert($(this).val()); });
这样修改后,当你选择下拉选项或者修改输入框内容时,就能正常触发change事件并弹出对应的值了。
内容的提问来源于stack exchange,提问作者shashikant kuswaha
相关产品推荐
相关产品推荐

