为了账号安全,请及时绑定邮箱和手机立即绑定

将Click事件侦听器添加到具有相同类的元素

将Click事件侦听器添加到具有相同类的元素

元芳怎么了 2019-09-24 15:05:48
我有一个删除ID的列表视图。我想为具有特定类的所有元素添加一个侦听器,并发出确认警报。我的问题是,这似乎只会将侦听器添加到具有找到的类的第一个元素。我尝试使用,querySelectorAll但是没有用。var deleteLink = document.querySelector('.delete');deleteLink.addEventListener('click', function(event) {    event.preventDefault();    var choice = confirm("sure u want to delete?");    if (choice) {        return true;    }});列表:<?php     while($obj=$result->fetch_object())    {        echo '<li><a class="delete" href="removeTruck.php?tid='.$obj->id.'">'.$obj->id.'</a>'            . '<a href="#" class="delete"></a>                      </li>'."\n";    }    /* free result set */    $result->close();           $mysqli->close();?>
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

使用querySelectorAll和for循环的问题在于,它为数组中的每个元素创建了一个全新的事件处理程序。


有时候,这正是您想要的。但是,如果您有许多元素,则创建单个事件处理程序并将其附加到容器元素可能会更有效。然后,您可以event.target用来引用触发事件的特定元素:


document.body.addEventListener("click", function (event) {

  if (event.target.classList.contains("delete")) {

    var title = event.target.getAttribute("title");


    if (!confirm("sure u want to delete " + title)) {

      event.preventDefault();

    }

  }

});

在此示例中,我们仅创建一个附加到该body元素的事件处理程序。每当body点击内的元素时,click事件就会冒泡到我们的事件处理程序中。


查看完整回答
反对 回复 2019-09-24
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

您必须使用querySelectorAll需要选择带有所述类的所有元素,这又querySelectorAll是一个数组,因此您需要对其进行迭代并添加事件处理程序


var deleteLinks = document.querySelectorAll('.delete');

for (var i = 0; i < deleteLinks.length; i++) {

    deleteLinks[i].addEventListener('click', function (event) {

        event.preventDefault();


        var choice = confirm("sure u want to delete?");

        if (choice) {

            return true;

        }

    });

}


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 429 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号