4

おおよそ次のようないくつかの要素があります。

<div>
    <a>
<div>

ユーザーが div のどこかをクリックするaと、使いやすさのために、要素がクリックされるようにします。

シンプルですよね?だから私はこれを書いた:

$('div.class').click(function(){  
    $('a.class', this).click();
    console.log('clicked'); 
});

問題は、これでa要素が問題なくクリックされることですが、イベントが に伝播しdiv、それがクリックされ、それが をクリックされ、それがaどこに行くのかがわかります。

ここで JSfiddle のサンプルを作成しまし たが、コンソール ログは表示されません。クリックしても、Firebug は何も表示しません。しかし、私のローカルサイトはログ(クリック)でFirebugを狂わせているので、最終的にスクリプトは殺され、too much recursion on this page

この再帰を停止するにはどうすればよいですか?

はい、私はこの目的に使用できることを知っていますが、リンクをクリックすると余分な作業が発生し、ブラウザのウィンドウ履歴も使用されるため、お父さんをクリックさせずにwindow.location悪意のあるものをクリックしたい. aまたはお母さん。またはそれが何であれdiv

読んでください

誰もが何度も何度も同じことを提案していて、うまくいかないので、このJSfiddleを見てください。回答する前に、試してみて、機能するかどうかを確認してください。をクリックするとdiv、Google が読み込まれます。それが私が探しているものです。

4

5 に答える 5

4

これがあなたのマークアップである場合:

<div>
    <a></a>
</div>

...あなたがする必要があるのは、あなたのcssで次のようなことをすることだけです:

div a { display: block};

アンカー要素は引き伸ばされて、親で使用可能なすべてのスペースを占有しますdiv。ただし、その中に他の要素が存在する場合はdiv、次のことができます。

$('a.class').click(function(event){
   event.stopPropagation();
   alert('you clicked on me');
});

$('div.class').click( function () {
  $(this).children('a.class').trigger('click');
});

 
于 2011-04-19T18:12:33.013 に答える
3

メソッドを使用しevent.stopPropagation()ます。

于 2011-04-19T17:20:43.350 に答える
1

これはどう?

$('selector').attr('onclick')()
于 2011-04-19T17:39:43.957 に答える
1

子ノードでクリック イベントを使用する代わりに、ブラウザーの場所をhref値に設定するだけです。

$('div.class').click(function(){
  location = $(this).find('a').attr('href');
});
于 2011-04-20T14:08:01.447 に答える
0
$('div.class').click(function(event){  
    event.stopPropagation();
    $('a.class', this).click();
    console.log('clicked'); 
});

ハンドラーにevent引数とメソッドを追加する必要があります。stopPropagation

于 2011-04-19T17:34:36.827 に答える