繁体   English   中英

如何检测事件是否是浏览器事件

[英]How to detect if the event is a browser event or not

您将如何根据事件的名称(例如click )来测试事件是否是浏览器事件(例如clickloadblur等)? ,我没有使用 jQuery/mootools/prototype/dojo)

更新

在这个 function 中,我附加了浏览器事件( clickload ),例如:

observe: function(elements, eventName, callback) {
  if (!(elements.length != null)) {
    elements = [elements];
  }
  return this.each(elements, function(e) {
    if (helper.hooks.eventObserved != null) {
      helper.hooks.eventObserved(eventName, callback, e);
    }
    if (typeof e === 'string') {
      e = this.el(e);
    }
    if (e.addEventListener) {
      return e.addEventListener(eventName, callback, false);
    } else if (e.attachEvent) {
      return e.attachEvent("on" + eventName, callback);
    }
  });
},

这会触发事件:

fire: function(elements, eventName) {
  if (!(elements.length != null)) {
    elements = [elements];
  }
  return this.each(elements, function(e) {
    var evt;
    if (document.createEventObject != null) {
      evt = document.createEventObject();
      return e.fireEvent("on" + eventName);
    } else {
      evt = document.createEvent('HTMLEvents');
      evt.initEvent(eventName, true, true);
      return !e.dispatchEvent(evt);
    }
  });
},

但我想要的是测试事件是否存在,例如click是浏览器事件但login不是,那么我该如何测试呢?

查看Juriy Zaytsev解决方案现场演示)。

jQuery 本身使用它。

您可以检查函数/对象element["on"+event]是否存在:

<a href="http://www.google.com" id="myAnchor">test</a>
<script>

function doesElementHaveEvent(element, event){
    return (typeof element["on"+event] != typeof undefined);
}

alert(doesElementHaveEvent(document.getElementById("myAnchor"), "click")); // true
alert(doesElementHaveEvent(document.getElementById("myAnchor"), "login")); // false
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM