JavaScript 事件屬性綁定帶參數(shù)的函數(shù)
更新時(shí)間:2009年03月13日 22:28:37 作者:
在JavaScript中,為了實(shí)現(xiàn)表現(xiàn)和控制相分離,可以通過0級的DOM事件屬性或者2級的事件模型來實(shí)現(xiàn),不過這兩者在針對某個(gè)事件類型調(diào)用相應(yīng)的事件句柄的時(shí)候,不能給事件句柄提供參數(shù),也就是說,事件屬性的值只能是一個(gè)函數(shù)引用。
例如不能采用這種調(diào)用方式:element.onclick = test();element.onclick = test(arg1,arg2);只能通過element.onclick = function(){ ... };或者element.onclick = test這種方式來實(shí)現(xiàn),所以無法給函數(shù)傳遞參數(shù)。參考了大量的網(wǎng)上資料,解決這個(gè)問題的方式,以代碼為例,如下所示:
function Handler() { };
Handler.prototype = {
/*
* 把eventType類型的事件綁定到element元素,并使用handler事件句柄進(jìn)行處理
* 兼容 IE 及 Firefox 等瀏覽器
*
* @param element 在其上注冊事件的對象(Object)
* @param eventType 注冊的事件類型(String),不加“on”
* @param handler 事件句柄(Function)
*/
registerEvent : function(element, eventType, handler) {
if(element.attachEvent) { //2級DOM的事件處理
element.attachEvent('on'+ eventType, handler);
}else if (element.addEventListener) {
element.addEventListener(eventType, handler, false);
} else { //0級DOM的事件處理
element['on'+ eventType] = handler;
}
},
/*
* 獲得帶參數(shù)的事件句柄的引用
*
* @param obj 需要綁定事件處理函數(shù)的所有者,null 表示 window 對象
* @param func 需要綁定的事件處理函數(shù)名
* @param ... 第三個(gè)參數(shù)開始為綁定事件處理函數(shù)的參數(shù),由 0 到多個(gè)構(gòu)成
*/
bind: function(obj, handler) {
obj = obj || window;
var args = [];
for(var i =2; i < arguments.length; i++)
{
args.push(arguments[i]);
}
return function() { handler.apply(obj, args) };
}
}
可能是使用方式為:
function show(txtObj) {
alert(txtObj.value);
txtObj.focus();
txtObj.select();
}
window.onload = function(){
var handler = new Handler();
handler.registerEvent($("txt"), "change", handler.bind(null,show,$("txt")));//采用2級事件模型的方式
//$("txt").onchange = handler.bind(null,show,$("txt"));//JavaScript事件屬性的方式
}
復(fù)制代碼 代碼如下:
function Handler() { };
Handler.prototype = {
/*
* 把eventType類型的事件綁定到element元素,并使用handler事件句柄進(jìn)行處理
* 兼容 IE 及 Firefox 等瀏覽器
*
* @param element 在其上注冊事件的對象(Object)
* @param eventType 注冊的事件類型(String),不加“on”
* @param handler 事件句柄(Function)
*/
registerEvent : function(element, eventType, handler) {
if(element.attachEvent) { //2級DOM的事件處理
element.attachEvent('on'+ eventType, handler);
}else if (element.addEventListener) {
element.addEventListener(eventType, handler, false);
} else { //0級DOM的事件處理
element['on'+ eventType] = handler;
}
},
/*
* 獲得帶參數(shù)的事件句柄的引用
*
* @param obj 需要綁定事件處理函數(shù)的所有者,null 表示 window 對象
* @param func 需要綁定的事件處理函數(shù)名
* @param ... 第三個(gè)參數(shù)開始為綁定事件處理函數(shù)的參數(shù),由 0 到多個(gè)構(gòu)成
*/
bind: function(obj, handler) {
obj = obj || window;
var args = [];
for(var i =2; i < arguments.length; i++)
{
args.push(arguments[i]);
}
return function() { handler.apply(obj, args) };
}
}
可能是使用方式為:
function show(txtObj) {
alert(txtObj.value);
txtObj.focus();
txtObj.select();
}
window.onload = function(){
var handler = new Handler();
handler.registerEvent($("txt"), "change", handler.bind(null,show,$("txt")));//采用2級事件模型的方式
//$("txt").onchange = handler.bind(null,show,$("txt"));//JavaScript事件屬性的方式
}
您可能感興趣的文章:
- JavaScript實(shí)現(xiàn)父子dom同時(shí)綁定兩個(gè)點(diǎn)擊事件,一個(gè)用捕獲,一個(gè)用冒泡時(shí)執(zhí)行順序的方法
- JavaScript call apply使用 JavaScript對象的方法綁定到DOM事件后this指向問題
- js中DOM事件綁定分析
- JS 事件綁定、事件監(jiān)聽、事件委托詳細(xì)介紹
- JavaScript給按鈕綁定點(diǎn)擊事件(onclick)的方法
- js創(chuàng)建一個(gè)input數(shù)組并綁定click事件的方法
- javascript事件委托的方式綁定詳解
- Javascript 事件流和事件綁定
- JS動(dòng)態(tài)添加元素及綁定事件造成程序重復(fù)執(zhí)行解決
- javaScript 事件綁定、事件冒泡、事件捕獲和事件執(zhí)行順序整理總結(jié)
- js事件on動(dòng)態(tài)綁定數(shù)據(jù),綁定多個(gè)事件的方法
- JavaScript Dom 綁定事件操作實(shí)例詳解
相關(guān)文章
javascript中利用數(shù)組實(shí)現(xiàn)的循環(huán)隊(duì)列代碼
javascript中利用數(shù)組實(shí)現(xiàn)的循環(huán)隊(duì)列代碼,需要的朋友可以參考下。2010-01-01小程序?qū)崿F(xiàn)短信登錄倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)短信登錄倒計(jì)時(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07非html5實(shí)現(xiàn)js版彈球游戲示例代碼
彈球游戲,一般都是使用html5來實(shí)現(xiàn)的,其實(shí)不然,使用js也可以實(shí)現(xiàn)類似的效果,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下,希望對大家有所幫助2013-09-09js判斷手機(jī)端(Android手機(jī)還是iPhone手機(jī))
現(xiàn)在使用手機(jī)上網(wǎng)的人越來越多,一些下載網(wǎng)站會(huì)通過判斷不同系統(tǒng)手機(jī)來訪問不同網(wǎng)頁,比如iPhone和Android。下面我們就來介紹一下如何用javascript判斷iPhone或Android手機(jī)訪問2015-07-07JavaScript封裝axios的實(shí)現(xiàn)詳解
這篇文章主要介紹了JavaScript封裝axios的實(shí)現(xiàn),Axios是一個(gè)開放源代碼庫,使我們可以輕松地發(fā)出HTTP請求。 實(shí)際上,它是通過額外的超能力來fetch2022-09-09微信小程序語音同步智能識別的實(shí)現(xiàn)案例代碼解析
在一些小程序的開發(fā)場景中經(jīng)常會(huì)有語音轉(zhuǎn)文字的需求,今天小編通過實(shí)際案例給大家分享微信小程序語音同步智能識別功能,需要的朋友可以參考下2020-05-05