JavaScriptの登録でパラメータの受け渡しが失敗する問題については、event_javascriptスキルをクリックしてください。

WBOY
リリース: 2016-05-16 16:41:39
オリジナル
1073 人が閲覧しました

過去 6 か月間、私は Java コードよりも多くの JavaScript コードを作成していました。以前は、窓口の承認が必要なため、銀行の窓口制御システムを構築していました。組織の権限、窓口タイプの権限、役職権限、ビジネス権限などのさまざまな要素を考慮すると、これらの権限は複数回交差または結合する必要があり、制御のためにページで大量の JavaScript を使用する必要があります。その結果、JavaScript コードが Java コードよりもこの機能モジュールの実装に責任を持つ状況が生じました。

今度は、C/S と同じくらい直感的で便利な管理機能を実現するために、銀行向けの貸金庫管理システムを開発する必要があります。その中核となる機能ブロックは貸金庫管理と貸金庫管理です。アーキテクチャでは、結果をオペレーターにリアルタイムで表示することもできます。数日間の検討と実験を経て、最終的には CSS JavaScript Java を開発に使用し、CSS でターゲット オブジェクトのさまざまな状態を表現しました。および JavaScript を使用して、ターゲット オブジェクトの状態に基づいて CSS 切り替えを実行します。

ここで問題が発生しました。つまり、JavaScript で HTML 要素のクリック イベント ハンドラー関数を登録するとき、たとえば、ハンドラー関数に 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);
}; 
};
ログイン後にコピー
次に、次の 2 つのメソッドを独自の js ライブラリに追加します。わからない場合は、この本のセクション 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;
ログイン後にコピー
上記の 2 つの関数は、「JavaScript.DOM 高度なプログラミング」のソース コードに基づいて私が少し変更し、再利用できるように私自身の JS ライブラリの 1 つに追加しました。次に、次のメソッドを使用して要素のイベントを登録し、パラメーターをイベント処理関数に渡すことができます:

//注册新的onclick事件处理函数
OYF_MARK.addEvent(e,'click',OYF_MARK.bindFunction(e,getContainerDetail,x,y,containid));
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート