我的问题的完整工作JSFiddle here。JQuery如何避免next()方法链接
我有一个具有多个子窗体形式:
<div class="container-fluid">
<form>
<ul style="list-style-type: none">
<li class="panel panel-body panel-default">
<div class="form-group">
<label clas="control-label" for="1_sample">Sample</label>
<input type="number" id="1_sample" name="1_sample" class="form-control">
</div>
<div class="progress">
<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%">
<span class="sr-only">100% Complete</span>
</div>
</div>
<div class="form-group">
<label clas="control-label" for="1_result">Result</label>
<input type="number" id="1_result" name="1_result" class="form-control">
</div>
<div class="form-group">
<label clas="control-label" for="1_number">Number</label>
<input type="number" id="1_number" name="1_number" class="form-control">
</div>
</li>
<li class="panel panel-body panel-default">
<div class="form-group">
<label clas="control-label" for="2_sample">Sample</label>
<input type="number" id="2_sample" name="2_sample" class="form-control">
</div>
<div class="progress">
<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%">
<span class="sr-only">100% Complete</span>
</div>
</div>
<div class="form-group">
<label clas="control-label" for="2_result">Result</label>
<input type="number" id="2_result" name="2_result" class="form-control">
</div>
<div class="form-group">
<label clas="control-label" for="2_number">Number</label>
<input type="number" id="2_number" name="2_number" class="form-control">
</div>
</li>
</ul>
</form>
</div>
的编码行为是当sample
输入的变化,在同一li
变化result
和number
输入在一起。
我的JQuery目前的样子:
$(document).ready(function() {
var form = $('form');
form.on('change', 'input[id$="sample"]', function (e) {
var sample_field = e.target;
var result_field = $(sample_field).closest('.form-group').next().next().find("input[id$='result']");
var number_field = $(sample_field).closest('.form-group').next().next().next().find("input[id$='number']");
var sample = $(sample_field).val();
$(result_field).val(sample);
$(number_field).val(sample);
});
});
什么我不知道是是否有办法避免next()
链接以获得正确的形式组?在真实的代码中,链条非常长,并且对元素的添加或删除也不是非常健壮。
find()
本身似乎并没有探索输入的.form-group
元素 - 是否有更好的方法来编写此功能?
更新:
的jsfiddle与代码更新,以反映接受的答案here。
谢谢 - 在我的特殊情况下,片段是'$(sample_field).closest('。form-group')。parent()。find(“div.form-group> input [id $ ='result']”) ;'。 – Darkstarone