0

入力といくつかのボタンを含むドロップダウン メニューがあります。ボタンの1つまたは他の場所をクリックするとドロップダウンが非表示になりますが、入力でキーを押しても非表示になりません。次のコードを使用していますが、機能しません。私が使用すると動作しますが

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

})

の代わりにlive

しかし、私は必要なのでlive、これに対する解決策はありますか?

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

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

3 に答える 3

1

e.stopPropagation().live()では、ハンドラは にバインドされているため、 では役に立ちませんdocument。したがって、ハンドラが呼び出されるまでに、イベントはすでにバブリングされています。

stopPropagationクリックされている要素のよりローカルな祖先から取得する必要があります。

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


補足ですが、「必要」になることはありません.live()。動的に作成された要素を処理する方法は他にもあります。

于 2012-05-08T18:22:04.210 に答える
0

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

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

注: event.target に適切に注意を払うと、.on(); を使用した「クリック」定義の重複に役立つはずです。

于 2012-05-08T18:24:14.117 に答える
0

試しましたか:

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

また

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

注: e.stopPropagation(); ライブイベントには効果的ではありません

あなたの質問によると、入力といくつかのボタンを含むドロップダウン メニューがあります。The dropdown should hide...は、DOM 内にドロップダウンが既に存在することを意味します。既に存在する場合は、ライブ イベントは必要ありません。

于 2012-05-08T18:22:35.443 に答える