2011-02-02 23 views
15

Javascriptのイベントリスナーを強制的に強制的に実行することが可能かどうかは疑問ですが、条件がtrueの場合は一度実行してから、引き続き条件を満たしてさらに実行する必要がありますか?JavaScriptを強制的に実行するEventListenerを強制しますか?

+0

「条件が成立していない」...条件は何ですか?また、それが一度発火したら、引き続き耳を傾け、おそらく再び発砲して、一度発射しないでください。一度に1つのイベント(複数の同時イベントではありません)だけを処理したいと思っている場合を除きますか? – KOGI

+0

あなたはjavascriptフレームワークを使用していますか? ExtJSでは可能だと思います。おそらくあまりにもjQueryで。 – Marc

+0

jQueryには.one()メソッドがありますが、それがあなたが探しているものであるかどうかはわかりません。ただし、ハンドラでイベントを再バインドするだけで済みます。これは、同時のイベントを処理しないという効果を持ち、ハンドラが完了した後、イベントのリスンを再び開始します。 http://api.jquery.com/one/ – KOGI

答えて

0

あなただけのページのロードの例を追加するために編集した

上の関数を呼び出し、関数内のコードをラップ場合:

は、あなたのイベントがあるが、ここでは例何知らない:

<a ..onclick='someFunction()'>click</a> 

<script type='text/javascript'> 
function someFunction() { 
    // do whatever 
} 

// call the function 
someFunction(); 
</script> 
+0

特定のコンテキストに関数が必要な場合は、jQueryのproxy()メソッドを使用できます。http://api.jquery.com/jQuery.proxy/ – KOGI

-1

あなたの質問が正しく理解されている場合は、一度に1つのイベントしか処理したくない場合(イベントが連続して複数回発生する場合は、そのうちの1つを処理したい場合のみ)、ハンドラが完了したら、より多くのイベント。正しい?

jQueryのは、それは一度だけのイベントを処理しますが、ハンドラ内で使用すると、再バインドイベント場合はあなたが望むように、それが機能する.one()メソッドのapi.jquery.com/one

を持っています。

function handler() 
{ 
    // do stuff 

    $(this).one('click', handler); 
} 

$('.someElement').one('click', handler); 
34
var clickFunction = function (event) { 
    //do some stuff here 
    window.removeEventListener('click',clickFunction, false); 

}; 
window.addEventListener("click", clickFunction, false); 

これはクロージャの魔法がにremoveEventListenerがclickFunctionを見つけてみましょうとして、あなたは一度clickFunctionを発射できるようになります。

単純なことをするためにライブラリを使用する必要はありません。

+0

このパターンを使用する必要がある場合は、すぐに問題になります。 1つのコードで2回これはCSSアニメーションコンテキストで非常に一般的です。アニメーション「フック遷移、変更の設定、移行の終了を自分自身で削除」があり、しばしばそれをチェーンする必要があります。 http://hastebin.com/ikixonajuk.coffeeに似たパターンははるかに保守的です。 NodeJSでは、これは単に「一度」と呼ばれます。 – Dmitry

+0

1. 2011年に回答が最初に掲載されたとき、かつては利用できなかった。 2.それは元の質問のクライアント側の実装の問題ですので、nodejsは役に立ちません。 3.あなたのコーヒースクリプトは、基本的に少し修正して同じ考えです。 – Jlam

+1

はブラウザを介して今すぐ利用可能ですか、それともそれを発明しなければならないのですか?肥大化したサードパーティライブラリを使用する必要がありますか? – Dmitry

関連する問題