此脚本使当您单击某个<div>
时,通过将类log_in_box_dd
添加到#big_ul_hide
来显示另一个<div>
。一旦#big_ul_hide
拥有该类,单击任意位置(#big_ul_hide
除外)将删除该类,从而隐藏它。因此,您单击以查看弹出的div,然后单击任何位置,但该div 应将其隐藏。
这整个事情有效,但只有一次。在那之后,它变得非常奇怪。
添加然后删除后,检查元素将读取<div id="big_ul_hide" class="">
。我无法让类重新添加。
我添加了 setTimeout
函数,因此单击.lin_und
时它不会立即删除类。
那么,为什么不让我重新添加类呢?如果我在.toggleclass
之后alert(...)
,它每次都会发出警报,但仍然不应用该类。
小提琴:http://jsfiddle.net/NQxAC/
<script>
$('.lin_und').click(function() {
$('#big_ul_hide').toggleClass('log_in_box_dd');
});
setTimeout(function() {
$('html').click(function() {
if($('#big_ul_hide').hasClass('log_in_box_dd')) {
$('#big_ul_hide').removeClass('log_in_box_dd');
}
});
$('#big_ul_hide').click(function(event) {
event.stopPropagation();
});
}, 2000);
</script>
首先停止事件冒泡,并将 click 事件处理程序移出html
内部单击处理程序,以便它存在它自己的一个(否则您将重复绑定 click 事件)。尝试使用:
$('.lin_und').click(function (e) {
e.stopPropagation();
$('#big_ul_hide').toggleClass('log_in_box_dd');
$('#big_ul_hide').click(function (event) {
event.stopPropagation();
});
});
$('html').click(function () {
$('#big_ul_hide').removeClass('log_in_box_dd');
});
js小提琴示例
如果你不停止冒泡.lin_und,冒泡到html,这将触发其点击事件处理程序。 你不需要设置超时。我会尝试这样的事情:
$('.lin_und').on('click', function (evt) {
evt.stopPropagation();
$('#big_ul_hide').toggleClass('log_in_box_dd');
});
$('html').on('click', function () {
$('#big_ul_hide').removeClass('log_in_box_dd');
});
$('#big_ul_hide').on('click', function (evt) {
evt.stopPropagation();
});
在这里看到它的工作原理:演示
你想让蓝色框是唯一显示隐藏div的人吗?如果是这样,那么在html点击处理程序上将.toggleClass()更改为.removeClass()
我不太确定我是否完全理解您的要求,但看看这个:http://jsfiddle.net/NQxAC/1/
$('.lin_und').click(function() {
$('#big_ul_hide').toggleClass('log_in_box_dd');
});
$('body').click(function(e) {
if (!$(e).target().is('.lin_und'))
$('#big_ul_hide').removeClass('log_in_box_dd');
});
单击上部div 将切换下部div。单击其他任何位置将隐藏第一个。