1. 程式人生 > >HTML 事件(四) 模擬事件操作

HTML 事件(四) 模擬事件操作

    本篇主要介紹HTML DOM中事件的模擬操作。

其他事件文章

4. HTML 事件(四) 模擬事件操作

目錄

  1.1 特點

  1.2 建立方式

2. 老版本

  2.1 建立步驟

  2.4 自定義事件

3. 新版本

  3.1 建立步驟

  3.4 自定義事件 

1. 模擬事件介紹

模擬事件,即非實際操作去觸發元素的事件。如按鈕的點選,不需要實際用滑鼠去點選此按鈕,而是採用模擬觸發此按鈕的點選事件。

1.1 特點

觸發元素的事件可以直接呼叫事件方法(如:click()觸發元素的click事件)。為何還要單獨的模擬觸發呢?

與直接觸發相比,模擬事件包含以下特點

①模擬特定場景:如觸發click事件,可同時模擬是否按下Ctrl、Alt等按鍵。

②可觸發自定義事件。

1.2 建立方式

模擬事件的建立方式有兩種:

老版:通過document.createEvent()方法建立各事件型別物件。

新版:通過各事件的建構函式建立事件型別物件。

:老版本方式將會被新版本方式所替代。

2. 老版本方式

說明:通過document.createEvent()方法建立各事件型別物件。

2.1 建立步驟

②呼叫event.initEvent()方法進行事件初始化。注意:不同的事件型別物件,其初始化的方法名稱也不通;比如MouseEvent的為event.initMouseEvent()。

③呼叫元素物件的dispatchEvent(event物件)方法進行派發。

2.2 支援的事件型別

2.3 模擬滑鼠點選

說明:模擬滑鼠點選,按鈕A和B都註冊了各自的點選事件,點選按鈕A時,模擬觸發按鈕B的點選事件。

HTML

<button id="a-btn">A按鈕</button>
<button id="b-btn">B按鈕</button>

JS

// 按鈕A點選時,模擬觸發按鈕B的點選事件
document.getElementById('a-btn').onclick=function(e){
    var clickEvent=document.createEvent('MouseEvent'); // 1.建立一個滑鼠事件型別
    clickEvent.initMouseEvent('click',false,false,window,0,0,0,0,0,false,false,false,false,0,null); // 2.初始化一個click事件
    document.getElementById('b-btn').dispatchEvent(clickEvent); // 3.派發(觸發)
};

// 按鈕B
document.getElementById('b-btn').onclick=function(e){
    console.log('b');
};

2.4 自定義事件

說明:模擬事件支援模擬觸發自定義事件。

HTML

<button id="a-btn">A按鈕</button>
<button id="b-btn">B按鈕</button>

JS

// 按鈕A
document.getElementById('a-btn').onclick=function(e){
    var customEvent=document.createEvent('CustomEvent'); // 1.建立一個自定義事件型別
    customEvent.initCustomEvent('build'); // 2.初始化一個build事件
    document.getElementById('b-btn').dispatchEvent(customEvent); // 3.派發(觸發)
};

// 按鈕B註冊一個自定義事件
document.getElementById('b-btn').addEventListener('build',function(){
    console.log('b-btn build');
});

3. 新版本方式

說明:通過各事件的建構函式建立事件型別物件。

3.1 建立步驟

①通過各事件型別的建構函式建立一個event物件。

②呼叫元素物件的dispatchEvent(event物件)方法進行派發。

3.2 支援的事件型別

3.3 模擬滑鼠點選

說明:模擬滑鼠點選,按鈕A和B都註冊了各自的點選事件,點選按鈕A時,模擬觸發按鈕B的點選事件並且模擬alt按鍵按下。

HTML

<button id="a-btn">A按鈕</button>
<button id="b-btn">B按鈕</button>

JS

// 按鈕A點選時,模擬觸發按鈕B的點選事件
document.getElementById('a-btn').onclick=function(e){
    var clickEvent=new MouseEvent('click',{
        altKey:true // 模擬alt鍵按下
    });
    document.getElementById('b-btn').dispatchEvent(clickEvent); // 派發
};

// 按鈕B
document.getElementById('b-btn').onclick=function(e){
    console.log('按鈕b點選事件觸發;alt案件是否按下:'+e.altKey);
};

3.4 自定義事件

說明:模擬事件支援模擬觸發自定義事件。

HTML

<button id="a-btn">A按鈕</button>
<button id="b-btn">B按鈕</button>

JS

// 按鈕A
document.getElementById('a-btn').onclick=function(e){
    var customEvent = new CustomEvent('build');
    document.getElementById('b-btn').dispatchEvent(customEvent); // 派發
};

// 按鈕B註冊一個自定義事件
document.getElementById('b-btn').addEventListener('build',function(){
    console.log('b-btn build');
});

4. Excel匯出應用場景

在Web系統中Excel匯出是很常見的功能,比如銷售記錄匯出、採購記錄匯出、人員資訊匯出等等。

採用HTML DOM的模擬事件可以定義為一個公共函式進行統一的匯出操作,各業務模組的匯出按鈕只需呼叫即可。

4.1 公共函式

/**
* 下載Excel檔案
* @param url {URL} 請求URL
* @param params {Params} 查詢引數
* @param fileName {String} 檔名稱
*/
function downloadExcel(url, params, fileName) {
    $.ajax({
        type:'GET',
        url: url,
        data:params,
        dataType:'json',
        success: function (data, responseStatus) {
            /*
            * data{
                msg:'UpFiles/XXXX.xls' // 返回的檔案連結
              }
            */
            var downloadURL = location.origin + '/' + data.msg; // 下載連結
            // 1)建立個a標籤
            var aElement = document.createElement('a');
            aElement.href = downloadURL;
            aElement.download = fileName;
            // 2)建立點選事件
            var clickEvent=new MouseEvent('click');
            aElement.dispatchEvent(clickEvent); // 派發
        }
    });
}

4.2 示例圖

相關推薦

HTML 事件() 模擬事件操作

    本篇主要介紹HTML DOM中事件的模擬操作。 其他事件文章 4. HTML 事件(四) 模擬事件操作 目錄   1.1 特點   1.2 建立方式 2. 老版本   2.1 建立步驟   2.4 自定義事件 3. 新版本   3.1 建立步驟

JS 中的自定義事件模擬事件

在 JS 中模擬事件指的是模擬 JS 中定義的一些事件,例如點選事件,鍵盤事件等。 自定義事件指的是建立一個自定義的,JS 中之前沒有的事件。 接下來分別說一下建立這兩種事件的方法。 建立自定義事件 建立自定義事件可以使用 Event 和 CustomEvent 兩種方法,接下來分別做一下介紹。 1. 利用

模擬事件【JavaScript高級程序設計第三版】

lpad 同時 布爾 href table 添加屬性 hang 精確 init 事件,就是網頁中某個特別值得關註的瞬間。事件經常由用戶操作或通過其他瀏覽器功能來觸發。但很少有人知道,也可以使用JavaScript 在任意時刻來觸發特定的事件,而此時的事件就如同瀏覽器創建的事

html事件-子元素事件不觸發父元素事件

result toggle 調用 col ati chang dom out bin <div class="list-row" onclick="showChatDialog(‘dy‘,‘100000001‘,true);"> <img cl

html 手機端click 事件延遲問題(fastclick.js使用方法)

cat 設計 fun 等待時間 get click tla 調用 span 下載地址: fastclick.js 為什麽存在延遲? 從點擊屏幕上的元素到觸發元素的 click 事件,移動瀏覽器會有大約 300 毫秒的等待時間。為什麽這麽設計呢? 因為它想看看

html 手機端click 事件去掉黑色陰影效果

phone asc 一個 ios pad tap 背景 ipa 就會 添加css樣式 html{-webkit-text-size-adjust: 100%;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);} 1、 -web

使用HTML DOM 來分配事件 —— onmouseover和onmouseout ,onmousedown和onmouseup

wid bsp this 謝謝 seo -c png 代碼 inner 一, onmouseover 和 onmouseout 事件 onmouseover 和 onmouseout 事件可用於在用戶的鼠標移至 HTML 元素上方或移出元素時觸發函數。 一個小例:鼠標未在上

監聽瀏覽器返回鍵、後退、上一頁事件(popstate)操作返回鍵

som cnblogs back eba spa 查詢 sta ces 關閉   在WebApp或瀏覽器中,會有點擊返回、後退、上一頁等按鈕實現自己的關閉頁面、調整到指定頁面、確認離開頁面或執行一些其它操作的需求。可以使用 popstate 事件進行監聽返回、後退、上一頁操

Android onClick 按鈕單擊事件 種常用寫法

匿名內部類 inpu find private highlight 事件監聽 instance super eat XML文件 <EditText android:layout_width="match_parent" android

None.js 第事件驅動程序

rec 數據接收 received 成功 handle 觸發事件 logs handler 驅動程序 Node.js 有多個內置的事件,我們可以通過引入 events 模塊,並通過實例化 EventEmitter 類來綁定和監聽事件 // 導入events模塊 var

HTML筆記04---計時事件

提示框 sta opc 按鈕 等於 round lock document rip JavaScript運動01 計時事件 1.語法:var t=setTimeout("javascript語句",毫秒); setTimeout() 方法會返回某個值。

jQuery事件,特殊屬性操作,鏈式變成,each

head prev charset ger turn on() script 鏈式編程 col <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8">

自定義瀏覽器事件模擬瀏覽器事件

簡述 我認為,事件是我們前端最為熟悉的程式設計模式,在前端開發中能接觸太多太多,而且相對而言,事件是一種相對容易理解,邏輯性高的的模式,對於優化元件/外掛的邏輯是一個很好的應用模式。 這文章主要是用JavaScript實現3級dom事件機制,後面的更新會涉及應用倒元件開發當中。

selenium模擬事件處理

執行原理: 呼叫ActionChains的方法時不會立即執行,會將所有的操作按順序存放在一個佇列裡,當呼叫perform()方法時,從佇列中的事件會依次執行。 支援鏈式寫法或者是分佈寫法。 滑鼠鍵盤方法列表:     perform() 執行鏈中的所有動作   &nbs

HTML標籤、DIV、SPAN擁有focus事件和blur事件,聚焦和失焦

DIV和其他普通標籤是不具有onfocus和onblur事件的。INPUT和A標籤為什麼擁有?而DIV和SPAN等普通標籤卻沒有?有時候我們習慣性用鍵盤的TAB來移動游標,仔細看你會發現,游標只在INPUT和A上跳轉。因為INPUT和A標籤具備TAB屬性。我們只需要給DIV或者SPAN等普通標籤建立TAB,這

Android studio程式碼實現打電話+點選事件種方式

?Android系統架構(重點) 第一層:應用層Application 第二層:應用框架層Application Framework 第三層:Android底層類庫層 Libraries、Dalvik虛擬機器 第四層:linux核心層 linux kernel Android是執行在

SWT自動觸發滑鼠事件模擬外掛

Point point = shell.getLocation(); Event ev = new Event();              //建立事件 ev.type = SWT.MouseMove

jquery事件,主動觸發與自定義事件:()

還是接著上篇繼續 11:jquery事件 12:主動觸發與自定義事件 13:事件委託 14:事件冒泡 15:jquery元素節點操作 16:滾輪事件與函式節流 17:jso

HTML-jQuery中的事件與動畫

網頁中的事件 和WinForm一樣,在網頁中的互動也是需要事件來實現的,例如tab切換效果,可以通過滑鼠單擊事件來實現 jQuery中的事件: jQuery事件是對JavaScript事件的封裝,常用事件分類: 基礎事件:①滑鼠事件;②鍵盤事件;③window事件

Elastic Job 入門教程()— 事件追蹤

Elastic-Job提供了事件追蹤功能,用於查詢、統計和監控作業執行歷史和執行狀態。Elastic-Job-Lite在配置中提供了JobEventConfiguration,目前支援資料庫方式配置。事