0
4

6 に答える 6

3

このようなことができます。

$('div, a').click(function(e) {
    if($(this).is('a')) return false;
    console.log('click');
});

デモ

于 2012-10-03T20:09:08.713 に答える
2

バインドされた要素のみがハンドラーをトリガーするようにする場合は、これをハンドラーの先頭に配置します。

if (this !== e.target)
    return;

ネストされた要素がクリックされた場合、コードはすぐに戻ります。(ハンドラーにパラメーターを定義することを忘れないでください。)e

于 2012-10-03T20:09:42.337 に答える
1
$("#parent *").on("click", function(e) {
    if ( e.target.nodeName.toLowerCase() == 'a' ) {
        e.stopPropagation();
    }

    ... your original code ...
});
于 2012-10-03T20:07:00.903 に答える
0

これがフィドルです:http: //jsfiddle.net/phillipkregg/65fNS/

これはかなり基本的なことです-現在のコードが何であるかわからないので-しかし、stopPropagation()で問題は発生していません。

実験するために、を削除するe.stopPropagation()と、リンクをクリックすると、最初にその関数が起動され、次にdivの関数が起動されることがわかります。

于 2012-10-03T20:25:54.467 に答える
0

クリックした要素は target.nodeName で確認できます

$("div").click(function(e){
    if(e.target.nodeName == "div" $(e.target).hashClass('validDiv')){
        // do stuff
    }
     else{
       return false;
   }
});
于 2012-10-03T20:07:08.467 に答える
0

私が好む方法は、クリック イベントを個別の関数に「ハイジャック」することです。リンクが最初に起動されるため<a>、onclick がチェックするページ内にブール値を設定し<div>、以前のクリックが検出された場合は単純に false を返すようにすることができます。

var linkClicked = false;

function LinkClick(something)
{
    linkClicked = true;
    // Do something
}

function DivClicked(something)
{
    if (linkClicked)
    {
        linkClicked = false;
        return false;
    }

    // Do something else
}
于 2012-10-03T20:09:11.323 に答える