'attacheventlistener'和'onclick'原型

时间:2013-05-06 12:15:04

标签: javascript jquery prototype

也许我的问题存在serval子问题:

  • 是否存在将事件绑定到元素的通用解决方案?(没有jquery或其他javascript库)。
  • 我发现$(element).data('events')无法在<element onclick="some_functions()">注册活动。我们怎么能得到它?

我的目标是在本机事件之前插入一个事件(由html页面的程序员注册)。我发现了两个解决方案

但是,我发现这两种方法都无法解决这种情况

<element onclick="some_functions()">

1 个答案:

答案 0 :(得分:0)

您可以通过onclick属性访问(并覆盖)该事件处理程序。如果你有

<span id="elem" onclick="some_functions()">

然后document.getElementById("elem").onclick将产生匿名函数

function (event) {
    some_functions()
}

要拦截它,您可以使用类似

的内容
var fn = elem.onclick;
elem.onclick = function() {
    console.log("before");
    var res = fn.apply(this, arguments);
    console.log("after");
    return res;
};

免责声明:这可能不适用于旧浏览器,我不知道内联属性事件处理程序和传统事件注册的发明者(Netscape,IE)如何处理这些问题。他们可能也做过类似eval(elem.getAttribute("onclick"))的事情,无论如何你都可以像这样访问处理程序代码(作为字符串)。