1

ok so my question is not clear let me explain what i want to do

i have set of inputs that i have added event Listener on and during run time i am deleting that input tags and generating new ones and i want to set same event Listener on that so how do i do that

thanks in advance

here is my code

document.querySelectorAll("input[type=radio]").forEach(radio => {
   
   
    radio.onchange = () => { // Event No.1
        const xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {

                var li = JSON.parse(this.response);

                // the response i am getting
                //["mainCategory",{"id":11,"MainCategory":"Pendalset","Top_ID":3,"created_at":null,"updated_at":null,"name":"Pendalset"},{"id":12,"MainCategory":"Diamond","Top_ID":3,"created_at":null,"updated_at":null,"name":"Diamond"},{"id":13,"MainCategory":"Couple Collection","Top_ID":3,"created_at":null,"updated_at":null,"name":"Couple Collection"},{"id":14,"MainCategory":"Antique","Top_ID":3,"created_at":null,"updated_at":null,"name":"Antique"},{"id":15,"MainCategory":"Wedding Collection","Top_ID":3,"created_at":null,"updated_at":null,"name":"Wedding Collection"},{"id":16,"MainCategory":"Engagement Collection","Top_ID":3,"created_at":null,"updated_at":null,"name":"Engagement Collection"},{"id":17,"MainCategory":"Necklace set","Top_ID":3,"created_at":null,"updated_at":null,"name":"Necklace set"}]

                var ul = document.querySelector("#" + li[0]);

                //removing inputs

                switch (li[0]) {
                    case "mainCategory":
                        var main = document.querySelector("#mainCategory");
                        var sub = document.querySelector("#subCategory");
                        while (main.firstChild) {
                            main.firstChild.remove()
                        }
                        while (sub.firstChild) {
                            sub.firstChild.remove()
                        }

                        break;
                    case "subCategory":
                        var sub = document.querySelector("#subCategory");
                        while (sub.firstChild) {
                            sub.firstChild.remove()
                        }
                        break;
                }
                var inpName = li.shift();
                //creating new list tag and input
                li.forEach(el => {
                    var list = document.createElement("li");
                    var input = document.createElement("input");
                    var b = document.createElement("b")
                    input.name = inpName;
                    input.type = "radio";
                    input.value = el.id
                    b.textContent = el.name;
                    list.append(input);
                    list.append(b);
                    ul.append(list)
                        // adding diffrenet event listeners 

                        // I WANT TO ADD EVENT NO.1 HERE on Dyanamically genrated Inputs
                    input.addEventListener("change", () => {
                        input.parentElement.parentElement.parentElement.firstElementChild.firstElementChild.textContent = input.nextElementSibling.textContent;
                        details.forEach((detail) => {
                            if (detail !== input) {
                                detail.removeAttribute("open");
                            }
                        });
                    })

                });
            }
        };
        xhr.open("GET", `category-update-${radio.name}-${radio.value}`, true);
        xhr.send()
    }
});
Terminator
  • 67
  • 6
  • You are already adding event listener to new input so not clear what problem is – charlietfl May 01 '21 at 12:32
  • 1
    Instead of adding a separate event listener on each individual input element, you could take advantage of event bubbling and add a single event listener on the common parent element of all the inputs. – Yousaf May 01 '21 at 12:33
  • @charlietfl i have updated my question i hope that may clear things , i want to add event no.1 on new inputs i dont know how – Terminator May 01 '21 at 12:45
  • Refer to this one: https://stackoverflow.com/q/34896106/3552975 – Lerner Zhang Jan 19 '23 at 12:12
  • Does this answer your question? [Attach event to dynamic elements in javascript](https://stackoverflow.com/questions/34896106/attach-event-to-dynamic-elements-in-javascript) – Lerner Zhang Jan 19 '23 at 12:13

0 Answers0