2010-12-20 14 views
0

DOM要素以外がクリックされるとイベントが発生するようにしたいですし、イメージをクリックすると別のイベントが発生します。クリックイベントをドキュメントにバインドして、オブジェクトがクリックされていないときにのみ起動する方法

今私が持っている:

$(document).click(function() { /*do whatev*/ }); 

と別の場所に:

$("img").click(function(e) { 
    e.stopPropagation(); 
    /*do whatev*/ 
}); 

それは動作しません。両方のイベントが発生します。他のアイデア?このような

答えて

2

jQuery(document).click(function(event) { 
    if (jQuery(event.target).is('img')) 
    { 
    alert('img'); 
    } 
    else 
    { 
    // Reject event 
    return false; 
    } 
}); 

img要素「IMG」に関するユーザーのクリックが警告されている場合は、それ以外のクリックイベントが停止しています。

+0

OPの質問から、$( "img")と同じ設定にならないのでしょうか?click(function(e){e.stopPropagation();/* code here * /}); DOMをクリックしてリスナーをもっともっと...? – subhaze

+0

私はこれについては分かりませんが、ドキュメントにクリックイベントハンドラを追加するのではなく、*すべての* DOM子孫ノードに文書を添付するだけですか? – ncuesta

+0

これは機能します。しかし、私は.not( 'img')と.is( 'not im(img)')を試してみました... – JIStone

1

何か:

$('*').click(function(ev) { 
    ev.stopPropagation(); 
    if ($(this).is('img')) alert('img'); 
    else if($(this).is('div')) alert('div'); 
    else alert('something else'); 
}); 

http://www.jsfiddle.net/U2Szn/?シンプルで簡潔な

+0

私は、彼はまた、割り当てる必要がありますことを考えます私はページ内の唯一のものになるとは思っていないので、IDをimgに追加してください。 –

+0

こんにちはAndy。一般的には、ここにコードを投稿することをお勧めします。例は常に良いですが、投稿は実際のコード、メチンクで構成する必要があります。 – karim79

0

これはうまくいくはずですが、ただimgでは不十分です。それはimgコンテナからトリガすることができます。私はあなたが$('p,div,img,a,input,textarea,span,ul,ol,dl,li,dd,dt,table,tr,td')のようなセレクタとそれを取り除くために考えることができる他のタグが必要だと思います。これにはパフォーマンス上の問題があります。あなたはhtmlおよび/またはbodyをクリックするか、imgはこのような何かが動作するはずクリックされたときにイベントを発生する場合

0

は:Live Example

$(document).click(function(e) { 
    if($(e.target).is('html')){ 
    alert('this is the html element'); 
    }else if($(e.target).is('body')){ 
    alert('this is the body element'); 
    } 
}); 
$("img").click(function(e) { 
    e.stopPropagation(); 
    alert('img') 
});​ 
関連する問題