web-dev-qa-db-ja.com

$( 'html')。click()... 1つの要素以外の場所

動的に追加されるメニューがあり、メニューリンク自体を含むページの任意の場所をクリックすると削除されます。私が達成しようとしているのは、特定のリンクをクリックしても削除できないようにすることです。残念ながら、デリゲートメソッドを使用できません。それが役立つ場合は、クライアント側で使用されているjqueryの古いバージョンのため、それを更新するオプションはありません。

だから、たぶんそうする方法があるかどうか提案することができます。これが私の簡単な例です。

<script>
            $(function() {

                $('.menu').append('<a href="" class="solid">Option</a> <a href="">Option</a> <a href="">Option</a>');                               

                $('.menu a').live('click',function(){
                    return false;
                });

                $('a.solid').live('click',function(){
                    return false;
                });

                $('html').click(function() {                    
                    $('.menu').remove();                
                });             

            });

        </script>

とコンテナ

<div class="menu"></div>
21
devjs11

多分それはこのように機能します

$('html').click(function(e) {                    
   if(!$(e.target).hasClass('solid') )
   {
       $('.menu').remove();                
   }
}); 

参照してください: http://jsfiddle.net/fq86U/2/

45
sneeky

これを試しましたか:

$('.menu a').click(function(event){
   event.stopPropagation();
});
5
huysentruitw

ドキュメント全体のクリックを検出し、クリックされた現在の要素がメニュー要素かどうかを確認することもできます

$(document).click(function(event){
    if(event.target !== $('.menu')[0]) {
        // hide the menu...
    }
});​
3
pplewa
$('html').click(function(e) {

        /* exept elements with class someClass */ 
        if($(e.target).hasClass('someClass')){
            e.preventDefault();
            return;
        }

        /* but be carefull the contained links! to be clickable */
        if($(e.target).is('a')){
            return;
        }

        /* here you can code what to do when click on html */

    });
1
alex