JS事件监听器的一种元素?

时间:2015-07-05 06:31:55

标签: javascript html addeventlistener

有没有办法为某种类型的html元素添加某种侦听器?例如,如果我想在用户点击任何 p元素

时调用函数

5 个答案:

答案 0 :(得分:1)

将事件监听器添加到window / document / document.body并检查元素的类型及其父类型,因为如果您有<span>内的<p>,单击该范围不会触发该段落中的点击。

document.addEventListener("click", function (eventArgs) {
    var target = eventArgs.target;
    var elementToLookFor = "p";
    while (target !== null) {
        if (target.tagName.toLowerCase() === elementToLookFor) {
            // Do magic stuff with the paragraph
            console.log(target);
        }
        target = target.parentElement;
    }
});

这种技术称为“事件委托”。

编辑:请注意,您无法从上面的循环中提前返回。如果你有嵌套的段落,即

<p>
    Hey,
    <p>there!</p>
</p>

提前返回只会调用内部段落的事件处理程序,而你说你希望在每个段落上调用处理程序,这就是为什么你需要遍历所有的元素的祖先。

答案 1 :(得分:1)

最简单的答案是使用addEventListener(),如果你想要一个特定的html标签,就像我想要的那样my question那么你会找到答案那里也可以解释它 添加这个

<script>
    document.addEventListener("click", function(e){
   //your desired nodeName like : DIV , SPAN , LI etc
       if(e.target && e.target.nodeName== 'DIV')
       //add a function below to trigger 
       {alert('bingo')}
    });

</script>

到文档的末尾 顺便说一下,不要忘记使用大写的nodeNames或只是在它之前放一个toLowerCase()。干杯:)

答案 2 :(得分:0)

我假设你正在寻找这些代码:

var paras = document.getElementsByTagName("p");

// Loop through elements. 
for(var i = 0; i < paras.length; i++) {
    // Add listener.
    paras[i].addEventListener("click",
        function() { 
            // Execute function.
        }, false);
}

答案 3 :(得分:0)

我只需选择页面上的所有元素,并在其上添加eventListeners,如下所示:

function addListeners(elementType, eventType, callback) {
    Array.prototype.slice.call(document.querySelectorAll(elementType)).forEach(function (el, i) {
        el.addEventListener(eventType, callback, false);
    });
}

上面我们使用querySelectorAll选择所有想要的元素,将其转换为数组(如果你使用es6,你可以使用Array.from)然后我们遍历数组并添加监听器想回调。

以下是一个例子:https://jsfiddle.net/a7en4d4s/

答案 4 :(得分:-1)

看看这个JSFiddle,看看它是否适合你

<span>Click Yes</span><br/><br/>
<span>Click No</span><br/><br/>
<a>Clicked: <b id="result"></b></a>
<script>
    $("span").click(function(){
    var a = $(this).html();
    $("#result").html(a);
    });
</script>