代码之家  ›  专栏  ›  技术社区  ›  Ben Shelock

javascript事件检测

  •  2
  • Ben Shelock  · 技术社区  · 16 年前

    我找不到任何关于这个令人惊讶的好文件,所以我把它贴在这里。

    原始javascript等价于什么:

    $(elem).click(function(){
        alert(this.text());
    });
    

    我只能找到这个 <elem onlick="func()" /> 这不是我想要的,我只想用javascript,而不是在元素的上下文中。

    4 回复  |  直到 16 年前
        1
  •  5
  •   bobince    16 年前

    假设 elem 是元素节点(如果不是,则需要使用选择器 getElementById 或者别的什么):

    elem.onclick= function() {
        var text= 'textContent' in elem? elem.textContent : elem.innerText;
        alert(text);
    };
    

    textContent 是从元素获取文本的标准兼容方式; innerText 是IE的方式。(有一些差异,但希望不会影响您。)如果您需要支持旧的/晦涩难懂的浏览器,而这两种浏览器都没有,那么您将不得不做一个冗长的树遍历来获取所有文本(这就是jquery的 text() 是吗?)

    (我想这就是你想要的 this.text() . 你的意思大概是 $(this).text() )

        2
  •  5
  •   Andy E    16 年前

    有几种方法可以在不使用库的情况下附加单击处理程序。首先是给 on[eventname] 元素的属性:

    element.onclick = function (eventObj) { 
        alert("textContent" in this ? this.textContent : this.innerText) 
    }
    

    您还可以分配一个要计算的代码字符串,但它并没有那么漂亮,而且通常是避免的。另一种方法是使用w3c标准 addEventListener :

    element.addEventListener("click", function (eventObj) { 
        alert("textContent" in this ? this.textContent : this.innerText) 
    }, false);
    

    当前版本的IE不支持这一点 attachEvent 相反:

    element.attachEvent("onclick", function () { 
        alert(event.srcElement.innerText); 
    });
    

    ie在将函数应用于触发事件的元素时遇到问题,因此 this 将无法正确指向该元素 附件 .

    第一种方法 element.onclick 对于X浏览器兼容性和快速编码很有用,但您只能为属性指定一个函数。使用 附件 加法器 您可以附加任意多个函数,它们都将正确触发。您可以在代码中创建一个跨浏览器半等效的简单功能检查:

    if ("addEventListener" in element)
        element.addEventListener("click", function (eventObj) { 
            alert("textContent" in this ? this.textContent : this.innerText) 
        }, false);
    else
        element.attachEvent("onclick", function () { 
            alert(event.srcElement.innerText); 
        });
    
        3
  •  4
  •   Adam Hopkinson    16 年前

    你可以的 object.onclick = handler

    var el = document.getElementById('elem');
    elem.onclick = function(){ alert("Clicked!") };
    

    这应该行得通-我现在对javascript有点不懂!

        4
  •  0
  •   Eugene    16 年前

    也许你需要这样的东西:

    document.getElementById('element_id').setAttribute("onclick","alert('hello world')");