I am using add remove input fields set via jquery.
I want to set input value of input depend on select option selected in that field set.
How to achieve this ?
Code:
var html_row = '<tr><td class="firstcell"></td><td><select name="is_member[]" ><option value="">Select</option><option value="Yes">Yes</option><option value="No">No</option></select></td><td><input name="membership_number[]" value=""></td><td><input type="button" name="remove" id="remove_row" class="btn btn-info" value="Remove This Section" tabindex="-1"></td></tr>';
var max = 50;
var x = 1;
$('#add_row').click(function() {
if (x <= max) {
$('#table_fields').append(html_row);
var els = $(".firstcell");
for (var i = 1; i < els.length; i++) {
els[i].innerHTML = i + 1;
$("select[name='is_member[]']").on('change', function() {
var member_status = $(this).val();
if (member_status == "No") {
$("input[name='membership_number[]']").val("Not Member");
} else {
$("input[name='membership_number[]']").val("");
}
});
}
}
});
$('#table_fields').on('click', '#remove_row', function() {
$(this).closest('tr').remove();
x--;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<table id="table_fields">
<tr>
<td></td>
<td>Is Member</td>
<td>Membership Number</td>
</tr>
<tr>
<td class="firstcell">1</td>
<td>
<select name="is_member[]">
<option value="">Select</option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</td>
<td><input name="membership_number[]" value=""></td>
<td></td>
</tr>
</table>
<br><br>
<div class="text-center"><input type="button" name="add" id="add_row" class="btn btn-primary" value="Add Input Row" tabindex="-2"> </div>
With this code, value of membership_number
field get changed but it is getting changed for all added rows of field set’s input fields.
I want to change it only for select option of that specific field set in a added row.
In jsfiddle, you can check by adding rows and changing is member option to No… all input fields values in membership number gets changed…
2
Answers
the issue is that you are selecting all elements with the name
membership_number[]
and changing their value collectively instead you should limit the change to the specific row where the select option was changed.The main issue in your code is that you’re selecting all the
input[name='membership_number[]
elements, then updating thevalue
in the first one only. To fix this you should use DOM traversal to find only theinput
related to theselect
that triggered the change event.Also note that there’s several other things you can do to improve your logic:
template
HTML element instead of storing HTML within your JS code.Here’s a working example with the above changed made: