2016-09-30 5 views
-1

私は本当にそれを理解しているかどうか、おそらく3番目のパラメータである[オプション]を完全に理解していませんが、コードにイベントリスナーの削除は、別の要素がホバリングされてもまだ起動しません

ドキュメントの作成時に、キーアップとキーダウンを処理するイベントリスナーを追加します。私はこれすべての作業をして、それは素晴らしい作品です。

window.addEventListener('keydown', keyinputhandler, false); 
window.addEventListener('keyup', keyinputhandler, false); 
function keyinputhandler(e) { 
//doing stuff with it here 
} 

問題はjqueryのホバーメソッドを使用して何かを行うときに発生します。

var someotherelement = $('#someotherelement'); 
someotherelement.hover(function(){ 
    window.removeEventListener('keydown', keyinputhandler, false); 
    window.removeEventListener('keyup', keyinputhandler, false); 
    //for some reason, the events in keyinputhandler keep firing here, why? 
    }, function() { 
    window.addEventListener('keydown', keyinputhandler, false); 
    window.addEventListener('keyup', keyinputhandler, false); 
    } 
); 

私のコードでは、私が達成しようとしていることのコメントエリアを含めました。特定の要素にカーソルを移動すると、他のイベントハンドラがトリガされることはありません。 someotherelementがホバリングされているときに、keyinputhandlerの動作を無効にするにはどうすればよいですか?

+1

あなたの問題のフィドルなどを作成することは可能ですか?誰かが手助けするのがずっと楽になります。 – Keith

+0

あなたのために1つを作ってください、ほんの数分です。 – simon

+1

私はそれをテストすることができます、あなたのコードは期待どおりに動作します。あなたがkeydownのときに何らかの理由でmouseleaveイベントを発生させなかったかどうか確認してください。 –

答えて

-1

最初のコールバックが実行されていることを確認できますか? jQueryの「ホバー」機能は、最初のコールバックをリスナーとして「mouseenter」イベントにアタッチします。

多分これは(http://api.jquery.com/mouseenter/から)ことができます:

MouseEnterイベントは、それがバブリングイベントを処理する方法にマウスオーバーとは異なります。この例でmouseoverを使用した場合、マウスポインタがInner要素の上を移動すると、ハンドラがトリガされます。これは通常望ましくない動作です。一方、mouseenterイベントは、子孫ではなくバインドされている要素にマウスが入ると、そのハンドラをトリガします。したがって、この例では、マウスがOuter要素に入るときにハンドラーがトリガーされますが、Inner要素には入っていません。

ウィンドウオブジェクトにリスナーを接続しています。次に、別のリスナーを内部要素にアタッチします。私はそれがマウスの泡立ち行動のために問題だと思う。

これを試してもよろしいですか?

$("#someotherelement") 
    .mouseover(function() { 
     window.removeEventListener('keydown', keyinputhandler, false); 
     window.removeEventListener('keyup', keyinputhandler, false); 
    }) 
    .mouseout(function() { 
     window.addEventListener('keydown', keyinputhandler, false); 
     window.addEventListener('keyup', keyinputhandler, false); 
}); 
+1

これはコメントではなく、回答として残す必要があります。あなたは十分な担当者を獲得したときにコメントすることができます。それまでは、OPとのダイアログへの回答は使用しないでください。 –

+0

私は説明をしました。 – Codeicus

+0

これは上記の私のコードと同じ効果があります。違いはありません。 – simon

関連する問題