移动端 new CustomEvent('input') 兼容问题

最近在 安卓自带浏览器 上发现  new CustomEvent('input') 不兼容

解决办法

(function () {
  if(!!window.CustomEvent) return;
  function CustomEvent ( event, params ) {
    params = params || { bubbles: false, cancelable: false, detail: undefined };
    var evt = document.createEvent( 'CustomEvent' );
    evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
    return evt;
   };

  CustomEvent.prototype = window.Event.prototype;

  window.CustomEvent = CustomEvent;
})();

  

http://stackoverflow.com/questions/23920708/get-short-javascript-customevent-polyfill-to-compile-in-typescript

其他的

function triggerEvent(element,eventType){
    var e;
    if(element.dispatchEvent){//正常情况
        e = new Event(eventType);
        element.dispatchEvent(e);
    }else if(element.fireEvent){//IE
        e = document.createEventObject();
        e.button = 1;
        element.fireEvent('on'+eventType,e);
    }else if(element['on'+eventType]){
        element['on'+eventType].call();
    }
}
try {
        evt = new window.CustomEvent(events[i], {
          detail: eventData,
          bubbles: true,
          cancelable: true,
        });
      } catch (e) {
        evt = document.createEvent('Event');
        evt.initEvent(events[i], true, true);
        evt.detail = eventData;
      }
 //create custom event
        if (typeof document.CustomEvent === 'function') {
            this.event = new document.CustomEvent('shake', {
                bubbles: true,
                cancelable: true
            });
        } else if (typeof document.createEvent === 'function') {
            this.event = document.createEvent('Event');
            this.event.initEvent('shake', true, true);
        } else {
            return false;
        }

 

    window.dispatchEvent(this.event);
//创建事件, Event是无法传递参数的
var event = new Event('suface');
//创建事件, CustomEvent是可以传递参数的
var event = new CustomEvent('suface', { detail: elem.dataset.time });

// 监听事件Listen for the event.
elem.addEventListener('suface', function (e) { //... }, false);

// 分发/触发事件Dispatch the event.
elem.dispatchEvent(event);

 

HTMLElement.prototype.trigger = function(type, data) {
    var event = document.createEvent('HTMLEvents');
    event.initEvent(type, true, true);
    event.data = data || {};
    event.eventName = type;
    event.target = this;
    this.dispatchEvent(event);
    return this;
}

  

原文地址:https://www.cnblogs.com/surfaces/p/6043781.html