Javascript 单击任意位置显示/隐藏并隐藏

Javascript 单击任意位置显示/隐藏并隐藏,javascript,mootools,show-hide,Javascript,Mootools,Show Hide,我有一个充当工具提示的div,以及一个显示此工具提示的链接。这部分很好用 <div class="tooltip"> <span class="tooltip_help"> <a onclick="toggleTooltips('tooltip1');" title="Tip"> <img src="/ca/images/general/tooltip.png" alt="tooltip icon" ti

我有一个充当工具提示的div,以及一个显示此工具提示的链接。这部分很好用

<div class="tooltip">
     <span class="tooltip_help">
        <a onclick="toggleTooltips('tooltip1');" title="Tip">
            <img src="/ca/images/general/tooltip.png" alt="tooltip icon" title="Tip" align="absmiddle" border="0" />
        </a>
    </span> 
    <div id="tooltip1" class="tooltip_box">
        <span>
           tip text here.
        </span>
    </div>
</div> 

提示文本在这里。
我试图做的是设置它,这样它就可以通过单击页面上的任何位置(包括div本身内部)隐藏起来。我已经很接近拥有它了,但它有时需要双击,有时会根据页面上任何地方的点击来显示自己。这是用mootools做的

<script language="javascript" type="text/javascript">
function toggleTooltips(id) {
    var e = document.id(id);
    if(e.style.display=='block') {
        e.style.display='none';
        document.removeEvent('click', function() {
            toggleTooltips(id);
        });
    } else {
        e.style.display='block';
        document.addEvent('click', function() {
            toggleTooltips(id);
        });
    }
}
</script>

功能切换工具提示(id){
var e=document.id(id);
if(e.style.display=='block'){
e、 style.display='none';
document.removeEvent('单击',函数()){
切换工具提示(id);
});
}否则{
e、 style.display='block';
document.addEvent('单击',函数()){
切换工具提示(id);
});
}
}

任何帮助都将不胜感激。

我不是mootools专家,但我认为您需要使用完全相同的函数调用
addEvent
removeEvent
,而不是两个做相同事情的函数。我的猜测是mootools无法删除click侦听器,因为它正在寻找一个尚未实际注册的函数。也就是说,它在寻找函数A,但您注册的函数是函数B。它们做相同的事情,但它们不是相同的函数

结果是文档上的click监听器永远不会被删除,而是在每次单击时切换元素,并且每次都添加一个新的切换函数。单击几次后,单击文档中的任意位置会导致元素来回切换X次。如果X是一个奇数,那么它似乎和预期的一样工作。如果是偶数,就不会有任何明显的效果

试试这个

function toggleTooltip(id) {
    var e = document.id(id);
    if( !e.toggleCallback ) {
        e.toggleCallback = function() { toggleTooltip(id); };
    }
    if(e.style.display=='block') {
        e.style.display='none';
        document.removeEvent('click', e.toggleCallback);
    } else {
        e.style.display='block';
        document.addEvent('click', e.toggleCallback);
    }
}
我还建议您不要使用
onclick
属性,因为您已经在使用mootools了。相反,请设置一个事件侦听器,以便在加载文档时触发。然后使用它找到需要切换的元素,并在那里设置所有内容


编辑:我的意思是:

你真是天赐之物。我不能完全让你的psuedo代码工作,但这个链接工作得很好!