0

したがって、ドキュメントをクリックして関数を呼び出す必要がありますが、問題は、要素をクリックしても反応しないため、コードは次のとおりです。

<body>

<div class="some_element">
some element
</div>



</body>

そしてjs:

$(document).click(function(){

   //something to happen

})

そして今、class="some_element" で div をクリックすると、document.click イベントが呼び出されますが、ドキュメントをクリックしたときにのみそのイベントを呼び出す必要があります.....または、この要素を作成することができます例外?

より詳細な:

$('#forma').click(function(e){

    e.stopPropagation();

    $('#assignment_type_list').slideUp();


})

#forma としましょう - これらの要素の親要素なので、ページをクリックすると、いくつかの要素をスライドさせたいとします:

$('#assignment_type_select, #assignment_type_label').click(function(){

        $('#assignment_type_list').slideToggle();



    })

これは、それらがクリックされたときの要素であり、他の要素が切り替えられますが、問題は、この要素をクリック$('#forma').clickすると、親とe.stopPropagation()- が役に立たないため、 - も実行されることです

4

3 に答える 3

3

これはすべてstopPropagation正しいことですが、特定のブラウザーの古いバージョンでスクリプトがエラーをスローする原因となります。どれだと思いますか?クロスブラウザの方法:

$('#elem').click(function(e)
{
    e = e || window.event;//IE doesn't pass the event object as standard to the handler
    //event would normally work, but if you declared some event variable in the current scope
    //all falls to pieces, so this e || window.event; thing is to be preferred (IMO)
    if (e.stopPropagation)//check if method exists
    {
        e.stopPropagation();
        return;
    }
    e.cancelBubble = true;//for IE
});

ただし、実際にクリックされた要素が必要なものであるかどうかを確認したいと考えました。問題は、イベントが DOM を通過する方法です。W3C ブラウザーでは、イベントは最初にドキュメントに渡され、次に実際にクリックされた要素に到達します (DOM を介して伝播します)。
対照的に、IE は要素自体にイベントをディスパッチし、それをドキュメントに送信します ( changeselect 要素によってトリガーされるイベントを除いて... 傷害に侮辱を加えます)。これが実質的に意味することは、W3C ブラウザの要素に登録されているクリック イベントがbody、ある種のチェックボックスに向かう途中であるか、空の div 内のクリックである可能性があるということです。
繰り返しますが、IE では、クリック イベントがbodyタグの場合、ページ上の任意の要素にもディスパッチされている可能性があります。したがって、あなたの場合、 google: に役立つか、jQueryのメソッドevent delegationに目を向けると役立つかもしれません。.delegate()

または、イベント オブジェクトをチェックして、イベントの伝播が許可されているかどうかを確認します。

var target =  e.target || e.srcElement;//target now holds a reference to the clicked element

プロパティ名は、バブリング モデルと伝播モデルの違いをきちんと示しています。最初のケース ( srcElement) では、イベントは dom 内のソース要素から発生しています。W3C 伝播モデルでは、イベントはtargetdom のどこかにある要素に向かっている間、咳をします。
熱探知ミサイル (w3c) とターゲットが撃ち落とされた後の破片のシャワー (IE、常に破壊的なものであり、この場合、イベントへの対応が遅れるため、処理が遅れることが多い) のように考えてください。それら:P)

于 2012-08-03T10:16:21.887 に答える
1

これを行う 1 つの方法は、 をチェックすることeventですtarget

$('html').click(function(event){
    if (event.target != this){
    }else{
        //do stuff
    }
});

これが実用的なフィドルです

于 2012-08-03T10:09:58.250 に答える
-1

ドキュメント上の要素はドキュメントの一部であるため、ドキュメント内の「some_element」をクリックすると、ドキュメントに登録されたイベントが発生/トリガーされることは明らかです。「ドキュメント」用のコードを実行したくない場合は、最初にこのイベントを発生させる要素または「イベント ソース」を取得し、上記の質問で「some_element」であるかどうかを確認します。

于 2012-08-03T10:17:03.133 に答える