如何實現JS主動觸發事件


 1 function triggerMouseOver(selector) {
 2   const targetElement = document.querySelector(selector);
 3   if (document.createEvent) {
 4     const event = document.createEvent('MouseEvents');
 5     event.initEvent('mouseover', true, false);
 6     targetElement.dispatchEvent(event);
 7   } else if (document.createEventObject) {
 8     //兼容IE
 9     targetElement.fireEvent('onmouseover');
10   }
11 }
12 
13 function triggerFocus(selector) {
14   const targetElement = document.querySelector(selector);
15   if (document.createEvent) {
16     const event = document.createEvent('HTMLEvents');
17     event.initEvent('focus', true, false);
18     targetElement.dispatchEvent(event);
19   } else if (document.createEventObject) {
20     //兼容IE
21     targetElement.fireEvent('focus');
22   }
23 }

1. document.createEvent(eventType)

參數:eventType 共5種類型:


eventType 包含事件
Events 包括所有的事件
HTMLEvents abort, blur, change, error, focus, load, reset, resize, scroll,select, submit, unload
UIEevents DOMActivate, DOMFocusIn, DOMFocusOut, keydown, keypress, keyup
MouseEvents click, mousedown, mousemove, mouseout, mouseover, mouseup
MutationEvents DOMAttrModified, DOMNodeInserted, DOMNodeRemoved, DOMCharacterDataModified, DOMNodeInsertedIntoDocument, DOMNodeRemovedFromDocument, DOMSubtreeModified

document.createEvent后必須初始化才能觸發

 1 // 通用 Events 和 HTMLEvents
 2 event.initEvent( 'type', bubbles, cancelable )
 3 // UIEvents
 4 event.initUIEvent( 'type', bubbles, cancelable, windowObject, detail )
 5 //MouseEvents
 6 event.initMouseEvent( 'type', bubbles, cancelable, windowObject, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget )
 7 //MutationEvents
 8 event.initMutationEvent( 'type', bubbles, cancelable, relatedNode, prevValue, newValue, attrName, attrChange ) 
 9 
10 // 在目標元素上觸發事件, 需要注意的是在IE 5.5+版本上請用fireEvent方法
11 targetElement.dispatchEvent( event )

舉個栗子(主動觸發 mouseover 事件)

  1. 主動觸發 click 事件
// 使用通用類型創建 click 事件
const event = document.createEvent('Events');
event.initEvent( 'click', true, false );
const targetElement = document.getElementById('someID');
targetElement.dispatchEvent(event);

// 使用通 MouseEvents 創建 click 事件
const event = document.createEvent('MouseEvents');
event.initMouseEvent( 'click', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
const targetElement = document.getElementById('someID');
targetElement.dispatchEvent(event);
  1. 主動觸發 mouseover 事件, 並考慮對 IE 的兼容
const targetElement = document.getElementById('someID');

if ( document.createEvent ) {
    const event = document.createEvent('MouseEvents');
    event.initEvent( 'mouseover', true, false );
    targetElement.dispatchEvent(event);
}else if ( document.createEventObject ) {
    //兼容IE
    targetElement.fireEvent('onmouseover');
}

 

作者:mocobk
鏈接:https://www.jianshu.com/p/7b92cc91f9cd
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM