事件繫結的第二種形式

2022-05-07 09:00:09 字數 1175 閱讀 6405

一、過去,給乙個物件繫結乙個事件,來處理函式的形式,如obj.onclick=fn1,我們稱之為事件繫結的第一種形式(賦值形式)。

這種形式的有一種缺點就是:同乙個物件的同乙個事件不能同時處理兩個不同的函式。

例如:

function fn1()

function fn2()

document.onclick=fn1;

document.onclick=fn2;//

後面乙個事件會覆蓋前面乙個事件

二、為了解決上面出現的問題:即同乙個物件的同乙個事件能繫結不同的事件。這種方法我們稱之為事件繫結的第二種形式。(函式形式)

在ie下和標準瀏覽器下,需要做相容:

1、 ie(obj.attacheven('事件名',函式名)

例如:document.attachevent('onclick',fn1);等同於上面document.onclick=fn1; 

1、沒有捕獲;

2、事件名稱有on;

3、函式執行的順序:在標準ie下,是正序的;非標準ie下,是倒敘的,從後往前執行。

4、函式裡面的this,指向的不是觸發事件的物件,而是window .

解決方法:call().

call()是函式內的一種的方法。呼叫函式:fn1()等同於fn1.call();

!!!特別重要的是,call()裡面的第乙個引數可以改變函式執行過程中內部this的指向。從第二個引數開始,就是原函式的引數

如果call方法的第乙個引數是null,那麼就不會改變this的指向。  

function fn1(a,b)

fn1.call(document,

10,20);

2、 標準(>ie9;ff;chrome等等):obj.addeventlistener('事件名',函式名,是否捕捉);;;是否捕捉:預設為false.事件名:沒有on

1、有捕獲;

2、事件名稱沒有on;

3、函式執行的順序為正序。

最後,封裝乙個函式,解決相容問題:

function bind(obj,evname,fn)

else

) }

}bind(documen,click,fn1);

bind(documen,click,fn2)

事件繫結的第二種形式

無標題文件title 給乙個物件繫結乙個事件處理函式的第一種形式 fn function fn1 function fn2 fn1 fn2 會覆蓋前面繫結fn1 給乙個物件的同乙個事件繫結多個不同的函式 給乙個元素繫結事件函式的第二種形式 ie obj.attachevent 事件名稱,事件函式 1...

js事件繫結的第二種形式

html htmllang en head metacharset utf 8 title 事件繫結的第二種形式 title head script window.onload function else bind document,click fn1 bind document,click fn2...

Qt 第二種執行緒

流程 工程目錄 新增在這裡作為全域性 namespace ui class mywidget public qwidget endif mywidget h mythread.cpp include mythread.h include 待會用到sleep函式 include mythread my...