Javascript $(';html';)。单击()。。。除了一个元素以外的任何地方

Javascript $(';html';)。单击()。。。除了一个元素以外的任何地方,javascript,jquery,html,click,Javascript,Jquery,Html,Click,我有一个动态附加的菜单,如果你点击页面上的任何地方,包括菜单链接本身,我会删除它。我试图实现的是防止删除,如果你点击一个特定的链接,这根本不适合我。不幸的是,我不能使用委托方法,如果这有帮助的话,因为客户端使用的jquery上的旧版本没有更新它的选项 所以,也许你可以建议是否有任何方法可以做到这一点。这是我的一个简单例子 <script> $(function() { $('.menu').append('<a href

我有一个动态附加的菜单,如果你点击页面上的任何地方,包括菜单链接本身,我会删除它。我试图实现的是防止删除,如果你点击一个特定的链接,这根本不适合我。不幸的是,我不能使用委托方法,如果这有帮助的话,因为客户端使用的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>

$(函数(){
$('.menu')。追加('');
$('.menu a').live('单击',函数()){
返回false;
});
$('a.solid').live('click',function()){
返回false;
});
$('html')。单击(函数(){
$('.menu').remove();
});             
});
集装箱呢

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

您是否尝试过以下方法:

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

也许它会像这样工作

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

请参阅:

您还可以检测对整个文档的单击,并检查单击的当前元素是否是您的菜单元素

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

还要添加event.preventDefault()以完全停止操作。我在这里进行了测试,它可以正常工作,您可能正在使用一个奇怪的jQuery版本。如果您在“.menu a”的单击处理程序中执行了
alert(event)
,它会告诉您什么?@woutherh ok它可以工作,但没有LIVE方法。在我的情况下,它必须是…live('click',函数(事件){….因为我以后会用ajax调用菜单。而使用LIVE方法则不起作用。你说的“以后用ajax调用菜单”是什么意思?当新的菜单数据出现时,你可以重新应用事件处理程序。这太完美了!!!!很有魅力,很直接,包括.LIVE('click',function…stoppropagation是一个更好的方法,但是如果在某种程度上不可行,那么这个方法会起作用。我可以问这样一个问题:如果我的容器中有子容器,我想如何做同样的行为?我不想给容器中的所有子容器添加一个类。有人知道解决方案吗?
$('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 */

    });