過去 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)
function bindFunction(obj, func){ var args = []; for(var i =2; i < arguments.length; i++) { args.push(arguments[i]); } return function(){ func.apply(obj, args); }; };
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;
//注册新的onclick事件处理函数 OYF_MARK.addEvent(e,'click',OYF_MARK.bindFunction(e,getContainerDetail,x,y,containid));