Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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 ';attacheventlistener';和';onclick';原型_Javascript_Jquery_Prototype - Fatal编程技术网

Javascript ';attacheventlistener';和';onclick';原型

Javascript ';attacheventlistener';和';onclick';原型,javascript,jquery,prototype,Javascript,Jquery,Prototype,我的问题可能有以下几个子问题: 是否有一种将事件绑定到元素的通用解决方案?(没有jquery或其他javascript库) 我发现$(元素)。数据('events')无法在中注册事件。我们怎样才能得到它 我的目标是在本机事件(由html页面的程序员注册)之前插入一个事件。我找到了两个解决办法 使用jQuery 修改HTMLElement.prototype.addeventlister 然而,我发现这两种方法都不能解决这种情况 <element onclick="some_func

我的问题可能有以下几个子问题:

  • 是否有一种将事件绑定到元素的通用解决方案?(没有jquery或其他javascript库)
  • 我发现
    $(元素)。数据('events')
    无法在
    中注册事件。我们怎样才能得到它
我的目标是在本机事件(由html页面的程序员注册)之前插入一个事件。我找到了两个解决办法

  • 使用jQuery
  • 修改
    HTMLElement.prototype.addeventlister
然而,我发现这两种方法都不能解决这种情况

<element onclick="some_functions()">

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

<span id="elem" onclick="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”))
的事情,在任何情况下,您都可以像那样访问处理程序代码(作为字符串)。

对于第一个问题,我们是否可以仅使用javascript将所有事件绑定到一个元素?也许不是跨浏览器,只是为了Chrome。不,至少不是从JS编程的。不过,您可以在开发工具中检查它们。我以为你已经在相关问题中找到了答案?
var fn = elem.onclick;
elem.onclick = function() {
    console.log("before");
    var res = fn.apply(this, arguments);
    console.log("after");
    return res;
};