2012-01-21 5 views
3

Javascriptでは、所有していないオブジェクトを変更しないでください。私は議論を理解し、同意する。それにもかかわらず、Eventオブジェクトの2つのプロパティを追加することを検討しています。最初に私は少しの背景だけでなく、その意味がどんなものかを書いていくつもりです。そして、私はプロと詐欺を持ってあなたから知的なフィードバックを得ることを望んでいます。Javascriptでのイベントオブジェクトの変更

addEvent、removeEventなどのメソッドを持つイベントマネージャーを作成しました。イベントが発生すると、イベントリスナーが登録されたときに渡されたイベントハンドラーにイベントオブジェクトを渡してハンドラーを呼び出します。

イベントオブジェクトを渡す前に、いくつかのプロパティをイベントオブジェクトに追加します。例えば; "hotkey" - "shift-c"、 "alt-d"、 "meta-a"などの可能な値を使用します。 (最後はWindowの "ctrl-a"、MacOSの "cmd + a"などに相当します。言い換えれば、OSによっては正しく一致し、ハンドラの論理パターンはオンになっているかどうか気にする必要はありませんどのOSやどのメタキーであるか)

これは、必要な「if-then」ステートメントがイベントマネージャによって実行されたことにより、ハンドラコードが小さくなることを意味します。キー関連のイベントが発生しました。イベントハンドラは、switch-statementを持っていて楽しいことをする必要があります。

hotKey-propertiesの他にも、イベントハンドラの機能を単純化し、イベントハンドラによって一般的に実行されるロジックを排除するために、いくつかのプロパティも追加する予定です。色の名前付けを避けるために、新しいプロパティをサブオブジェクトに追加することがあります。つまり、プロパティはトップレベルのプロパティである必要はありません。

私は現時点でこれを実装していますが、私は考えていないかもしれない洞察を得ることを望んでいます。

ADDITION

質問は、他の人は、以下の実装について考えるものです。これには、ハンドラに渡されるイベントオブジェクトを変更する必要があります。私は実際に私が所有していないオブジェクトを修正しているので、私は質問しています...しかし、この場合、そうする利点があります。

addEvent(document, "keyup", function(event) { 
    switch (event.hotKey) { 
     case 'meta-c': 
      // code here 
      break; 
     case 'meta-a': 
      // code here 
      break; 
    } 
}); 
+1

イベントオブジェクトを変更してもよいかどうかを尋ねるだけの場合、これは[codereview](http://codereview.stackexchange.com/)に属していると思います – Esailija

答えて

0

ソリューションのdrabackは、あなたがevent.hotKeyの実装にユーザーを結び付けていることです。別のライブラリに自分の実装であるevent.hotKeyが追加されていれば、あなたとはまったく異なることになります。両方を使用しようとすると、デバッグの問題が発生します。

代わりに、イベントオブジェクト自体を変更することで、あなたは個別に機能を提供する必要があります:あなたはハンドラは、イベントをラップする必要があるという事実が気に入らない場合は

function MyEvent(event) { 
    var myEvent = clone(event); 
    myEvent.hotKey = ... 
    return myEvent; 
} 

addEvent(document, "keyup", function(event) { 
    switch (MyEvent(event).hotKey) { 
     case 'meta-c': 
      // code here 
      break; 
     case 'meta-a': 
      // code here 
      break; 
    } 
}); 

、あなたはリスニング機能を変更することができます:

function myAddEvent (target, type, handler, capture, scope) { 
    var myHandler = function(event){ 
    handler.call(scope,MyEvent(event)); 
    } 
    addEvent(target, type, myHandler, capture); 
} 

*これは単なるドラフトソリューションである、あなたはまだunlisteningおよび他の局面

0

こんにちはハカンを考慮する必要があり、あなたはここにもある:)

event objectを独自に作成し、trigger()機能を使用して送信してください。

//Create a new jQuery.Event object without the "new" operator. 
 
var e = jQuery.Event("click"); 
 
    
 
// trigger an artificial click event 
 
jQuery("body").trigger(e);

トリガー

$("#foo").on("click", function() { 
 
    alert($(this).text()); 
 
}); 
 
$("#foo").trigger("click");

すべての例では、それらのリンクにあります。

+0

リンク腐敗や変更されたコンテンツからの回答を保護するあなたの答えにリンクされた内容の関連部分を含めてください。 –

+0

Ok Michael L私はそれをやります、ありがとう –

関連する問題