Home > Mobile >  js event looping on dynamic content
js event looping on dynamic content

Time:09-17

i have this div in my homepage.php file:

<?php foreach($posts as $post): ?>
   </div class="post>
            <div class="options">
                <div class="option"></div>
                <div class="option"></div>
                <div class="option"></div>
            </div>
            <div class="none editanddelete">
                <button type="button" class="edit">edit</button>
                <button type="button" class="delete">delete</button>

            </div>
            <div class="imageandname">
                <img src="<?php echo $post->user_image ?>">
                <div class="username"><?php echo $post->username ?></div>
            </div>
            <div class="post_body">
                <?php echo $post->post_body ?><br>

            </div>
   </div>
<?php endforeach; ?>

the $posts is array that is coming from database through controller and each time i publish a post, the body will add new div like above with the data needed from the $post array, now as shown above, the child div with class "editanddelete" is hidden by giving class "none" which is display:none; now with javascript i want to make an event where when i click on the child div with class="options", it toggles the "none" class of the child div with class="editanddelete", like the following:

post = document.querySelector('.post');
options = post.querySelector('.options');
editanddelete = options.querySelector('.editanddelete');

options.addEventListener('click', () => {
   editanddelete.classList.toggle('none');
})

when i execute this code, it works fine on the first post (div) that is dynamically created, but when i add another post, the event will not work on the second post div, i tried to use querySelectorAll and loop "options" classes that will be created dynamically, but it just does not work as expected and the event affects other divs, what i want is to make the event for all divs, every div on it's own

CodePudding user response:

You need to work with the same .editanddelete element as .options is clicked.

JS code could be like

var options = document.querySelector('.options');

// here maybe would be for cycle over options (I can't test it now)
options.addEventListener('click', () => {
   this.parentNode.querySelector('.editanddelete').classList.toggle('none');
})
  • Related