First of all I’m adding a button via js:
let newTextArea = "<div class='row mt-4'><div class='col'><button type='button' class='btn btn-light rimuovi' onclick='removeIt()'>Rimuovi</button></div</div>";
Once on the page, I might want to remove it so I’m calling that function on a click:
function removeIt(e) {
e.closest(".row").remove();
}
but I’m getting
Cannot read properties of undefined (reading 'closest') at removeIt
3
Answers
You just forgot to pass your element (e) in the paramters in your JS fonction on the HTML.
So, try with :
Working example:
Hope this helps you.
As others mentioned, you forgot to pass "this" as a parameter to your removeIt() method. The "this" keywords refers to, in this case, the element in which the click listener is used (your button). With the "this" keyword set as a parameter, JS can now look for a "closest" element with the class "row". It starts from the button and goes up the dom-tree until it finds an element with a className "row" or until it reaches the root.
Working example:
The main issue is because you aren’t providing the
e
argument when you call theremoveIt()
function in theonclick
attribute.However you should note that using an inline
onclick
attribute is not good practice. A better way to achieve what you need is to attach an unobtrusive delegated event handler which accepts the Event object as an argument. You can then use that Event to retrieve the Element object which triggered the handler. Something like this: