中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

關于javaScript注冊click事件傳遞參數的不成功問題
來源:易賢網 閱讀:1281 次 日期:2014-07-22 19:47:48
溫馨提示:易賢網小編為您整理了“關于javaScript注冊click事件傳遞參數的不成功問題”,方便廣大網友查閱!

在javaScript中給一個html元素注冊click事件處理函數時,比如給該處理函數傳3個參數??墒遣还苁鞘褂孟旅婺欠N方式都不能給事件處理函數傳遞參數。

最近這半年作為一個java 程序員,我寫的javaScript代碼都快比java代碼多了,前段時間是給某銀行做一個柜員管控系統,在柜員授權這一塊功能上,由于柜員的授權需要考慮各方面的因素,比如機構權限、柜員類型權限、崗位權限,業務權限等等,并且要對這些權限要做多次的交集或者并集處理,頁面上不得不用許多的javascript來進行控制。造成了這一功能模塊的實現上javaScript代碼比java代碼負責的情況。

而現在又要給某銀行開發一個保管箱管理系統,其核心功能塊保管箱座管理以及保管箱管理,為實現管理功能上類似與C/S架構那樣直觀、方便,并將處理結果實時的顯示給操作人員,經過幾日思考與實驗,最終使用CSS+javaScript+java來進行開發,用java來處理業務邏輯,用CSS用來表現目標對象的各種狀態,用javaScript來根據目標對象的狀態轉變,來實現其CSS的切換。

在這其中遇到了一個難題,就是在javaScript中給一個html元素注冊click事件處理函數時,比如給該處理函數傳3個參數。可是不管是使用下面那種方式(node表示要注冊事件的節點,fun為事件處理函數)都不能給事件處理函數傳遞參數:

node.addEventListener('click', fun, false);

node.attachevent('onclick', fun);

Node['onclick']=fun

顯然以方式都不行,注意一下寫法都是不正確的:

node.addEventListener('click', fun(arg1,arg2,arg3), false);

node.attachevent('onclick', fun(arg1,arg2,arg3));

Node['onclick']=fun(arg1,arg2,arg3)

好在讀過一本書《JavaScript.DOM高級程序設計》,在這本書上找到了解決方案。首先編寫一個方法:

function bindFunction(obj, func){

var args = [];

for(var i =2; i < arguments.length; i++) {

args.push(arguments[i]);

}

return function(){

func.apply(obj, args);

};

};

然后在自己的js庫中添加如下兩個方法,如有不明白的地方,可以參考《JavaScript.DOM高級程序設計》,其中該書2.3小節有該方法的說明,只是本人加了些許改動:

function bindFunction(obj, func){

var args = [];

for(var i =2; i < arguments.length; i++) {

args.push(arguments[i]);

}

return function(){

func.apply(obj, args);

};

};

window['OYF_MARK']['bindFunction'] = bindFunction;

function addEvent(node, type, listener){

//使用前面的方法檢查兼容性以保證平穩退化

if (!isCompatible()) {

return false

}

if (!(node = $(node)))

return false;

if (node.addEventListener) {

//W3C的方法(冒泡事件,如果將false改為true,則為捕獲事件)

node.addEventListener(type, listener, false);

return true;

}

else

if (node.attachEvent) {

//MSIE的方法

node['e' + type + listener] = listener;

node[type + listener] = function(){

node['e' + type + listener](window.event);

}

node.attachEvent('on' + type, node[type + listener]);

return true;

}

//若兩種方法都不具備則返回false

return false;

};

window['OYF_MARK']['addEvent'] = addEvent;

以上兩個函數為本人根據《JavaScript.DOM高級程序設計》中源代碼稍作修改,添加到自己的的一個js庫中,以便復用。接下來就可以使用如下方式給元素注冊事件并向事件處理函數傳遞參數了:

//注冊新的onclick事件處理函數

OYF_MARK.addEvent(e,'click',OYF_MARK.bindFunction(e,getContainerDetail,x,y,containid));

更多信息請查看IT技術專欄

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
主站蜘蛛池模板: 闽侯县| 龙门县| 商都县| 盖州市| 洛阳市| 永吉县| 新龙县| 丹东市| 福安市| 红桥区| 太谷县| 鄯善县| 旺苍县| 锡林郭勒盟| 崇阳县| 雅江县| 平凉市| 福安市| 青田县| 仙游县| 海口市| 深水埗区| 栖霞市| 莱州市| 临泽县| 红河县| 贡觉县| 忻城县| 勃利县| 延吉市| 晋中市| 五华县| 疏附县| 麻城市| 疏附县| 云龙县| 黑山县| 卢龙县| 平和县| 浦江县| 云和县|