首页 > 建站教程 > JS、jQ、TS >  用纯JavaScript替代jQuery之事件篇正文

用纯JavaScript替代jQuery之事件篇

        接上篇:用纯JavaScript替代jQuery之元素操作篇

>>>>Off

jQuery
1$(el).off(eventName, eventHandler);

谷歌浏览器,火狐浏览器,IE8+
1function removeEventListener(el, eventName, handler) {
2  if (el.removeEventListener)
3    el.removeEventListener(eventName, handler);
4  else
5    el.detachEvent('on' + eventName, handler);
6}
7 
8removeEventListener(el, eventName, handler);

谷歌浏览器,火狐浏览器,IE9+
1el.removeEventListener(eventName, eventHandler);

>>>>On

jQuery
1$(el).on(eventName, eventHandler);

谷歌浏览器,火狐浏览器,IE8+
01function addEventListener(el, eventName, handler) {
02  if (el.addEventListener) {
03    el.addEventListener(eventName, handler);
04  } else {
05    el.attachEvent('on' + eventName, function(){
06      handler.call(el);
07    });
08  }
09}
10 
11addEventListener(el, eventName, handler);

谷歌浏览器,火狐浏览器,IE9+
1el.addEventListener(eventName, eventHandler);

>>>>Ready

jQuery
1$(document).ready(function(){
2});

谷歌浏览器,火狐浏览器,IE8+
01function ready(fn) {
02  if (document.readyState != 'loading'){
03    fn();
04  } else if (document.addEventListener) {
05    document.addEventListener('DOMContentLoaded', fn);
06  } else {
07    document.attachEvent('onreadystatechange', function() {
08      if (document.readyState != 'loading')
09        fn();
10    });
11  }
12}

谷歌浏览器,火狐浏览器,IE9+
1function ready(fn) {
2  if (document.readyState != 'loading'){
3    fn();
4  } else {
5    document.addEventListener('DOMContentLoaded', fn);
6  }
7}

>>>>指定事件触发

jQuery
1$(el).trigger('my-event', {some: 'data'});

谷歌浏览器,火狐浏览器,IE8+
1// 自定义事件本身不支持,所以你要定义一个随机事件。只能用 jQuery 了╮(╯﹏╰)╭

谷歌浏览器,火狐浏览器,IE9+
1if (window.CustomEvent) {
2  var event = new CustomEvent('my-event', {detail: {some: 'data'}});
3} else {
4  var event = document.createEvent('CustomEvent');
5  event.initCustomEvent('my-event', true, true, {some: 'data'});
6}
7 
8el.dispatchEvent(event);

>>>>Trigger Native

jQuery
1$(el).trigger('change');

谷歌浏览器,火狐浏览器,IE8+
1if (document.createEvent) {
2  var event = document.createEvent('HTMLEvents');
3  event.initEvent('change', true, false);
4  el.dispatchEvent(event);
5} else {
6  el.fireEvent('onchange');
7}

谷歌浏览器,火狐浏览器,IE9+
1//对于一个事件类型的完整列表可以参见: https://developer.mozilla.org/en-US/docs/Web/API/document.createEvent
2var event = document.createEvent('HTMLEvents');
3event.initEvent('change', true, false);
4el.dispatchEvent(event);