Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript侦听所有标记_Javascript_Onclick_Listener_Event Listener - Fatal编程技术网

Javascript侦听所有标记

Javascript侦听所有标记,javascript,onclick,listener,event-listener,Javascript,Onclick,Listener,Event Listener,如何单击“侦听所有跨度标记”?这项任务需要在没有框架的情况下解决 var spancontainer = document.all.tags('span'); spancontainer.onclick = function() { alert("hi"); } [...] <span>Hello</span><span>World</span> var单击\u警报=函数(){ 警报(“hi”);

如何单击“侦听所有跨度标记”?这项任务需要在没有框架的情况下解决

    var spancontainer = document.all.tags('span');
    spancontainer.onclick = function() {
        alert("hi");
    }
[...]
    <span>Hello</span><span>World</span>
var单击\u警报=函数(){
警报(“hi”);
};
var span=document.getElementsByTagName('span');
对于(变量i=0;i
为了更广泛的兼容性,您可以编写使用addEventListener或attachEvent的包装;
var spans = document.getElementsByTagName('span');
for(var i = 0; i < spans.length; i++)
{
  // ...
}
对于(变量i=0;i您可以利用事件冒泡。将事件处理程序附加到根目录并侦听
单击
事件:

document.onclick = function(event) {
    event = event || window.event; // IE specials
    var target = event.target || event.srcElement; // IE specials

    if(target.nodeName === "SPAN") {
        alert('hi');
    }
};
现在,如果
span
中有其他元素,并且您也希望捕获
span
中的
单击事件,则这将不起作用。在这种情况下,您必须遍历DOM:

document.onclick = function(event) {
    event = event || window.event; // IE specials
    var target = event.target || event.srcElement; // IE specials

    while(target.nodeName !== "SPAN" && target !== null) {
        target = target.parentNode;
    }

    if(target) {
        alert('hi');
    }
};

这相当于jQuery的
live
方法,他在示例中没有使用该方法。@Matthew:那么?问题是如何聆听
span
标签上的点击<代码>$(“span”)。单击
就是一个示例。有几种方法可以达到这种效果。有两种不同的效果。1.当前存在的所有跨度上的侦听器。2.现在或将来存在的所有跨度上的侦听器。根据他的
。单击
示例,看起来他想要前者。您的代码实现了后者。@Matthew:实际上,我并不期望OP会仔细选择jQuery示例。我还可以说,他的意思是
document.all.tags('span')
返回一些活动的
spancontainer
,它神奇地将
click
处理程序应用于现在和将来存在的每个元素。无论如何,最好有两种不同的方法,而不是三倍相同的方法;)您可以为(var i=span.length-1;i>=0;i--)编写
作为(var i=span.length;i--;)的
@Felix Kling谢谢您的建议。
var spans = document.getElementsByTagName('span');
for(var i = 0; i < spans.length; i++)
{
  // ...
}
document.onclick = function(event) {
    event = event || window.event; // IE specials
    var target = event.target || event.srcElement; // IE specials

    if(target.nodeName === "SPAN") {
        alert('hi');
    }
};
document.onclick = function(event) {
    event = event || window.event; // IE specials
    var target = event.target || event.srcElement; // IE specials

    while(target.nodeName !== "SPAN" && target !== null) {
        target = target.parentNode;
    }

    if(target) {
        alert('hi');
    }
};