当前位置: 首页 > 面试题库 >

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

充星腾
2023-03-14
问题内容

我有一个删除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();
?>

问题答案:

您应该使用querySelectorAll。它返回NodeList,但是querySelector仅返回找到的第一个元素:

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

然后,您将循环:

for (var i = 0; i < deleteLink.length; i++) {
    deleteLink[i].addEventListener('click', function(event) {
        if (!confirm("sure u want to delete " + this.title)) {
            event.preventDefault();
        }
    });
}

另外,只有在时,您才应该阻止Default confirm === false

还值得注意的是,此return false/true方法仅对与绑定的事件处理程序有用onclick = function() {...}。对于addEventListening你应该使用event.preventDefault()

ES6版本

通过使用Array.prototype.forEach迭代而不是for循环,可以使它更简洁并且更安全地闭环

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

Array.from(deleteLinks).forEach(link => {
    link.addEventListener('click', function(event) {
        if (!confirm(`sure u want to delete ${this.title}`)) {
            event.preventDefault();
        }
    });
});


 类似资料:
  • 我正在用canvas构建一个新的Javascript游戏,我想为每个对象添加一个事件监听器。我想画一个有用的操纵杆(箭头),当游戏从智能手机/平板电脑打开。所以,玩家可以通过点击每个箭头来移动角色。 这就是我所拥有的: game.js:

  • 我目前正在尝试编写一些JavaScript来获取已单击的类的属性。我知道要正确地执行此操作,我应该使用事件监听器。我的代码如下: 我希望每次点击其中一个类时都有一个警告框来告诉我该属性,但不幸的是,这并不起作用。有人能帮忙吗?

  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 问题内容: 我有一个ArrayList,它向其中动态添加了一些对象,并且有一个JButton。运行我的程序时ArrayList为空,并且JButton设置为setEnabled(false)。我想在ArrayList中有2个或更多元素时启用我的按钮,如果ArrayList有一项或为空则再次禁用它。我该如何实现? 问题答案: 没有任何种类的通知机制。 我建议您编写自己的实现,该实现将委托给私有的实现

  • 我可以在下面的代码中为添加事件侦听器,但不能添加到。 是不是因为twitter做了一些事情不让我这么做?有办法绕过它吗?

  • 将事件侦听器添加到可以使用事件委派的元素。 使用 EventTarget.addEventListener() 将一个事件监听器添加到一个元素。 如果提供了 选项对象(opts) 的 target 属性,确保事件目标匹配指定的目标元素,然后通过提供正确的 this 上下文来调用回调。 返回一个对自定义委派函数的引用,以便与 off 一起使用。 忽略 opts ,则默认为非委派行为,并且事件冒泡。