0

I have been trying to use jQuery on this code but it is not responsive. I dynamically try to add some rows to the end of an HTML table and I have also included a cancel button. The click function on the cancel button doesn't seem to work.

I can't post full code here, so I included a link to the jsFiddle.

Part of JavaScript code:

$('#myTable tbody:last').after('<tbody class="newrow"><tr><td> <input  type="text" class="app"></td><td><input type="text" class="env"> |\n\
 </td><td><input type="text" class="region"> | </td><td><input type="text"  class="url"> | \n\
</td><td><button class="cancel">X</button></td>\n\
</tr></tbody>');          
}

$('.cancel').on('click', function() {
    alert();
   //$(this).closest('tbody').fadeOut(2000); 
});
0

2 Answers 2

3

You need to use delegated events in order to catch click events for dinamycally added elements.

After you implement the changes proposed in the comments, change your click handler to this

$('body').on('click','.cancel', function() {
    console.log($(this));
    //$(this).closest('tbody').fadeOut(2000); 
});

This will output in the browser console, the button that has been clicked, it should work on the new elements also.

Sign up to request clarification or add additional context in comments.

Comments

0

Create unique class for each cancel obj

<button class="cancel' + counter + '">X</button>

and initiate the trigger then, full solution:

     var counter = 0;//specify counter variable to create unique cancel class
     $('.addfinal').click(function(){   
          n=$('.addno').val();
          for(var i=0;i<n;i++){

         $('#myTable tbody:last').after('<tbody class="newrow"><tr><td><input type="text" class="app"></td><td><input type="text" class="env"> |\n\                  </td><td><input type="text" class="region"> | </td><td><input type="text"      class="url"> | \n\</td><td><button class="cancel' + counter + '">X</button></td>\n\</tr></tbody>');
     } 


            cancel($(".cancel"+counter))
            counter++;
     });
});

When you initiate click event for cancel class then that class doesn't exists yet, try to wrap it in the function and attach this click event for each cancel obj that you will create with the row, your cancel objects will have a unique id now thanks to counter variable (see above).

function cancel($obj){
    $obj.on('click', function() {
         console.log($(this).closest('tbody'))
         $(this).closest('tbody').fadeOut(2000); 
    });
}

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.