0

I am using dynamic input form in Laravel-5.8. The Add button is working perfectly, but the remove button is not working when I click on it.

My code in the view blade is shown below:

<table class="table table-bordered">
   <thead>
      <tr>
         <th scope="col">Activity</th>
         <th scope="col">KPI Description</th>
         <th scope="col">Attachment</th>
         <th scope="col"><a class="addRow"><i class="fa fa-plus"></i></a></th>
      </tr>
   </thead>
    <tbody>
       <tr>
           <td><input type="text" name="activity[]" class="form-control qty" ></td>
           <td><input type="text" name="kpi_description[]" class="form-control price" ></td>
           <td>
              <div class="custom-file">
                 <input type="file" name="appraisal_doc[]" class="custom-file-input" id="customFile">
                 <label class="custom-file-label" for="exampleInputFile">Choose file</label>
              </div>
             </td>
           <td><a class="btn btn-danger remove"> <i class="fa fa-remove"></i></a></td>
        </tr>
    </tbody>
</table>

   <script type="text/javascript">
    $(document).ready(function(){
        $('.addRow').on('click', function () {
            addRow();

        });

        function addRow() {
            var addRow = '<tr>\n' +
'  <td><input type="text" name="activity[]" class="form-control activity" ></td>\n' +
'  <td><input type="text" name="kpi_description[]" class="form-control kpi_description" ></td>\n' +
'  <td><div class="custom-file"><input type="file" name="appraisal_doc[]" class="custom-file-input" id="customFile"><label class="custom-file-label" for="exampleInputFile">Choose file</label></div></td>\n' +
'  <td><a   class="btn btn-danger remove"> <i class="fa fa-remove"></i></a></td>\n' +
'   </tr>';
            $('tbody').append(addRow);
        };

        $('.remove').live('click', function () {
            var l =$('tbody tr').length;
            if(l==1){
                alert('you cant delete last one')
            }else{

                $(this).parent().parent().remove();

            }

        });
    });

</script>

When I replaced

$('.remove').live

with

$('.remove').on

it only allows me to delete at the first instance. After that no response. Then if I refresh or reload the page it starts again

Where did I get it wrong and how do I get it resolved?

Thanks.

2 Answers 2

1

use below code for dynamic element

$(document).on('click','.remove',function(){
    if($('tbody tr').length == 1){
        alert('you cant delete last one')
    } else {
        $(this).parent().parent().remove();
    }
});
Sign up to request clarification or add additional context in comments.

Comments

0

You need to use Event Delegation with dynamically appended HTML. Your code:

$('.remove').on('click', function () { ... });

Will only work for any class="remove" elements that are present at the time the code is called.

If you want to target existing classes, and any that are appended, simply assign the click logic to a parent element:

$('body').on('click', '.remove', function(){ ... });

As you're targeting any .remove classes that are below body, it should handle any dynamically appended .remove classes.

See https://api.jquery.com/on/ for full details.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.