【问题标题】:js event looping on dynamic content动态内容上的 js 事件循环
【发布时间】:2021-10-31 01:54:18
【问题描述】:

我的 homepage.php 文件中有这个 div:

<?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; ?>

$posts 是通过控制器来自数据库的数组,每次我发布帖子时,body 都会像上面一样添加新的 div,其中包含 $post 数组所需的数据,现在如上所示,子 div 与类“editanddelete”通过给类“none”隐藏,即display:none; 现在使用 javascript 我想创建一个事件,当我单击具有 class="options" 的子 div 时,它会切换具有 class="editanddelete" 的子 div 的“none”类,如下所示:

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

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

当我执行此代码时,它在动态创建的第一个帖子 (div) 上运行良好,但是当我添加另一个帖子时,该事件将无法在第二个帖子 div 上运行,我尝试使用 querySelectorAll 并循环“选项”类将动态创建,但它不能按预期工作,并且该事件会影响其他 div,我想要的是为所有 div 制作事件,每个 div 都是自己的

【问题讨论】:

  • 当然,你永远不会告诉“使用第三个 .post 元素”。
  • 不仅是第二和第三。而是所有通过循环 $posts 数组动态创建的帖子 div

标签: javascript php html codeigniter foreach


【解决方案1】:

您需要使用与单击.options 相同的.editanddelete 元素。

JS 代码可能是这样的

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');
})

【讨论】:

  • 这和我的代码一样,其中 editanddelete = options.querySelector('.editanddelete');this.parentNode.querySelector( '.editanddelete')
  • 它给出了相同的结果,它只适用于动态创建的第一个 div,而不适用于其他 div
  • 正如我在代码注释中所写的,也许必须有 for 循环(迭代选项集合)。只需添加它。
  • 天哪,终于成功了,我还是不明白怎么回事,但是谢谢老兄
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 2021-03-25
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
相关资源
最近更新 更多