I have used jquery code for solving issue but it won’t work.Only first + button is working. if I press first + button then textbox was added in below 2 (+) buttons(i.e beside Annexure II & Annexure III)–>1 image description
After Clicking First (+) Button beside Annexure 1 Sheet, 1 row i.e (starting cell,ending cell,no of headers cell) was added in every sheet(i.e For Annexure II and Annexure III) but I want that it should be added in that sheet only so for example when I click button beside Annexure II only new row inside Annexure II were added it should not reflect inside all the sheets –> 2 image description
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript"> jQuery(document).ready( function () { $("#append").click( function(e) { e.preventDefault(); $(".inc").append('<div class="controls"> <input class="form-control" type="text" name="textbox" placeholder="Starting cell" style="width: 190px;"> <input class="form-control" type="text" name="textbox" placeholder="Ending cell" style="width: 190px;"> <input class="form-control" type="text" name="textbox" placeholder="No. of Headers" style="width: 190px;"> <button style="margin-left: 50px" class="remove_this btn btn-danger" type="submit" id="append" name="append">x</button> <br> <br> </div>'); return false; }); jQuery(document).on('click', '.remove_this', function() { jQuery(this).parent().remove(); return false; }); $("input[type=submit]").click(function(e) { e.preventDefault(); $(this).next("[name=textbox]") .val( $.map($(".inc :text"), function(el) { return el.value }).join(",n") ) }) }); </script> <! --name value was coming from res.render(__dirname+'/checkhtml.html',{names:sheet_name_list});--> <div class="form-group row"> <div id="experienceSection"> <% names.forEach(function(name) { %> <br> <label class="form-label form-label-top form-label-auto" id="label_20" for="input_20"> Enter Table Configuration for @ <h4> <%= name %> </h4> Sheet <span class="form-required"> * </span> </label> <div class="inc"> <div class="controls"> <input type="text" class="form-control" name="<%= name %>" id="answer1" style="width: 190px;" placeholder="Starting Cell"/> <input type="text" class="form-control" name="<%= name %>" id="answer1" style="width: 190px;" placeholder="Ending Cell"/> <input type="text" class="form-control" name="<%= name %>" id="answer1" style="width: 190px;" placeholder="No. of Headers"/> <button style="margin-left: 50px" type="button" id="append" name="append">+</button> <br> <br> </div> </div> <% }); %> </div> </div>
Advertisement
Answer
Your code is inside loop so its assigning same id to every buttons and we cannot use same id for mutliple elements . Instead change id
to class
.Then , use $(this).closest(".inc")
to target only inc
div where button has been clicked
Demo Code :
//change to class $(".append").click(function(e) { var name = $(this).closest(".inc").prev().find("h4").text().trim(); console.log(name) e.preventDefault(); //use closest..here $(this).closest(".inc").append(`<div class="controls"> <input class="form-control" type="text" name="${name}" placeholder="Starting cell" style="width: 190px;"> <input class="form-control" type="text" name="${name}" placeholder="Ending cell" style="width: 190px;"> <input class="form-control" type="text" name="${name}" placeholder="No. of Headers" style="width: 190px;"> <button style="margin-left: 50px" class="remove_this btn btn-danger" type="button" name="append">x</button> <br> <br> </div>`); return false; }); jQuery(document).on('click', '.remove_this', function() { jQuery(this).parent().remove(); return false; });
.inc { border: 2px solid blue; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div class="form-group row"> <div id="experienceSection"> <br> <label class="form-label form-label-top form-label-auto" id="label_20" for="input_20"> Enter Table Configuration for @ <h4> Abc </h4> Sheet <span class="form-required"> * </span> </label> <div class="inc"> <div class="controls"> <input type="text" class="form-control answer1" name="<%= name %>" style="width: 190px;" placeholder="Starting Cell" /> <input type="text" class="form-control answer1" name="<%= name %>" style="width: 190px;" placeholder="Ending Cell" /> <input type="text" class="form-control answer1" name="<%= name %>" style="width: 190px;" placeholder="No. of Headers" /> <!--use class--> <button style="margin-left: 50px" type="button" class="append" name="append">+</button> <br> <br> </div> </div> <br> <label class="form-label form-label-top form-label-auto" id="label_20" for="input_20"> Enter Table Configuration for @ <h4> Xyz </h4> Sheet <span class="form-required"> * </span> </label> <div class="inc"> <div class="controls"> <input type="text" class="form-control answer1" name="<%= name %>" style="width: 190px;" placeholder="Starting Cell" /> <input type="text" class="form-control answer1" name="<%= name %>" style="width: 190px;" placeholder="Ending Cell" /> <input type="text" class="form-control answer1" name="<%= name %>" style="width: 190px;" placeholder="No. of Headers" /> <button style="margin-left: 50px" type="button" class="append" name="append">+</button> <br> <br> </div> </div> </div>