JSFiddle - React, Tailwind, and code Playground
HTML
<form method="post" action="actionhere">
<div id='clone_me'>
<div> <span id="title">Line 1</span>
<div>
<input type='checkbox' name='ck_1' data-id="1" />
</div>
<div>
<input type='text' class='tx1' name='tx[1][]' />
<input type='text' class='tx1' name='tx[1][]' />
<input type='text' class='tx1' name='tx[1][]' />
<input type='text' class='tx1' name='tx[1][]' />
</div>
</div>
<div> <span id="title">Line 2</span>
<div>
<input type='checkbox' name='ck_2' data-id="2" />
</div>
<div>
<input type='text' class='tx2' name='tx[2][]' />
<input type='text' class='tx2' name='tx[2][]' />
<input type='text' class='tx2' name='tx[2][]' />
<input type='text' class='tx2' name='tx[2][]' />
</div>
</div>
</div>
<input type='submit' name='submit' value='Submit' />
<input type="button" value="Add row" class="addrow" />
</form>
JavaScript
$(document).ready(function () {
$('.addrow').click(function () {
var n = $("#clone_me>div").length;
var new_n = n + 1;
var new_line = $('#clone_me div:first').clone().append();
$("span#title", new_line).text("Line " + new_n + " ");
$("input#ck_1", new_line).attr("name", "ck_" + new_n);
$("input#ck_1", new_line).attr("data-id", new_n);
$("input#ck_1", new_line).attr("id", "ck_" + new_n);
$("input.tx1", new_line).attr("name", "tx[" + new_n + "][]");
$("input.tx1", new_line).attr("class", "tx" + new_n);
new_line.appendTo('#clone_me');
});
$('input[type="checkbox"]').click(function () {
var self = $(this);
var checkboxId = self.data('id');
var checkboxChecked = self.is(":checked");
/* jQuery < 1.9 */
if (checkboxChecked) {
$('.tx' + checkboxId).attr('readonly', 'readonly');
} else {
$('.tx' + checkboxId).removeAttr('readonly');
}
/* jQuery 1.9+ */
$('.tx' + checkboxId).prop('readonly', checkboxChecked);
});
});