2012-05-08 6 views
0

私は入力といくつかのボタンを含むドロップダウンメニューを持っています。ボタンの1つをクリックするか他の場所をクリックするとドロップダウンが表示されますが、入力時にキーを押すと非表示にはなりません。私は次のコードを使用しますが、動作しません。私はjqueryライブクリックイベントstopPropagation

$('.dropdown input').click(function(e){ 

}) 

の代わりliveを使用する場合、それは動作しますけれども。

しかし、私はliveが必要ですか?これには解決策がありますか?ハンドラが呼び出された時点で、イベントはすでに泡立てたので、ハンドラは、documentにバインドされているため

/* dropdown menu */ 
$('.dropdown input').live('click', function(e) { 
    e.stopPropagation(); 
}); 

$(document).click(function(e){ 
    if(e.isPropagationStopped()) return; //important, check for it! 
}); 
+1

あなたはhtmlも投稿できますか? jQuery 1.7では '.live()'は非推奨です。 '.on()'や '.delegate()'を使用することをお勧めします。 –

+0

は '.dropdown input'が動的に作成されますか? –

+0

あなたはon()を使用していなければなりません。ライブは、既にドキュメントレベルに伝播されているため、クリックと同様に動作しません。入力時に停止しません。 – scottheckel

答えて

1

e.stopPropagation()は、.live()であなたのためには良いを行いません。

stopPropagationクリックする要素のよりローカルの祖先から入力する必要があります。

.live()を使用していたため、いくつかの動的要素が作成されていると仮定します。その場合、バインドする適切な要素はコードの残りの部分に依存します。


サイドノートですが、「必要」はありません.live()。動的に作成された要素を処理する他の方法もあります。

+0

他の方法は何ですか? – Jensen

+0

@ Jensen:要素を動的に作成する場合は、作成時にハンドラをバインドすることができます。あるいは、 'on'や' delegate'のようなjQueryの他のイベント委譲メソッドを使うこともできます。または、独自のイベント委任を行うこともできます。 –

+0

...イベントの委任が分からない場合は、それを読んでください。非常にシンプルなコンセプトですが、非常に便利です。 'live()'メソッドはイベントの委譲を使用しますが、それは事実を隠すので、人々はそれを気付かないことがよくあります。 –

0

あなたが試すんでした:

$('.dropdown').on('click', 'input', function(e) { 
    e.stopPropagation(); 
}); 

OR

$('.dropdown').delegate('input', 'click', function(e) { 
    e.stopPropagation(); 
}); 

注:e.stopPropagation(); is not effective for live event

あなたによるがに疑問を私が入力し、いくつかのボタンが含まれているドロップダウンメニューを持っています。ドロップダウンは非表示にする必要があります。は、DOM内にドロップダウンが既に存在することを意味します。すでに存在する場合は、ライブイベントは必要ありません。

+0

または '$(document).on( 'クリック'、 '。ドロップダウン入力'、function(){})' –

+0

私はonまたはdelegateを使用しようとしましたが、clickイベントが発生していないようです代わりに – Jensen

+0

@ Jensenですが、ライブは推奨されていません。 – thecodeparadox

0

jQueryのどのバージョンを使用していますか? > 1.7、その後:

$(document).on({"click":function(e){ 
    //do your work, only input clicks will fire this 
}},".dropdown input",null); 

ノート: が正しくevent.targetに注意を払っ)の定義は(.on使用して 'クリック' の重複を手伝う必要があります。

+0

はまだ動作しないと確信しているので、これは奇妙です – Jensen

関連する問題