在这个小jsFiddle http://jsfiddle.net/PcWjA/22/我试图做一个ul go显示:没有当有一个点击身体(或任何地方不是上的项目)和工作的第一个时间有一个点击身体。但在此之后,脚本似乎循环显示/隐藏ul闪存。jQuery关闭/切换div通过点击正文
回答
我有另一个答案 http://jsfiddle.net/FfBzT/
jQuery(document).ready(function() {
jQuery('.hour_dropdown').hide()
$(window).click(function (event) {
if ($(event.target).hasClass("hour_dropdown") ||
$(event.target).parents(".hour_dropdown").size() > 0 ||
$(event.target).hasClass("more")){
// do nothing....
} else {
$('.hour_dropdown').fadeOut(200);
}
});
jQuery('.more').click(function() {
//if ($('.hour_dropdown').css("display")=="none") {
$('.hour_dropdown').fadeToggle(200);
//}
});
});
我只是添加jsfiddle – 2012-08-08 00:38:44
谢谢,所以你的解决方案是使用大于0的大小。这非常聪明! – 2012-08-08 00:39:59
问题是您正在重复注册body.click处理程序,并且从不删除它。 jQuery维护事件侦听器的列表,因此当您多次添加相同的点击处理程序时,它会针对每次点击执行多次。
我会定身单击处理一次,在事件的document.ready,并将它只是隐藏小时下拉如果当前可见的,是这样的:
jQuery('.more').click(function() {
if ($('.hour_dropdown').is(':hidden')) {
$('.hour_dropdown').fadeToggle(200);
}
});
jQuery('body').click(function() {
if ($('.hour_dropdown').is(':visible')) {
$('.hour_dropdown').fadeOut(200);
}
});
值得指出的是'span'中的'ul'是无效的HTML。修正版本:http://jsfiddle.net/PcWjA/25/ – Stecman 2012-08-08 00:29:31
简单地取消绑定体click事件这将解决您的问题。
jQuery(document).ready(function() {
jQuery('.hour_dropdown').hide()
jQuery('.more').click(function() {
if ($('.hour_dropdown').is(':hidden')) {
$('.hour_dropdown').fadeToggle(200);
$("body").unbind();
} else {
$('body').click(function() {
$('.hour_dropdown').fadeOut(200);
});
}
});
});
怎么样(希望这是正确的行为):
jQuery(document).ready(function() {
var element = $('.hour_dropdown');
element.hide();
$('body').click(function(event) {
if (('more' == $(event.target).attr('class')) || (0 < $(event.target).parents('.more').length)) {
element.fadeIn(200);
} else {
element.fadeOut(200);
}
});
});
它检查点击的元素是否也正是一个与more
类还是一个家长有这个类。它还将类.hour_dropdown
中的元素存储在一个变量中,并减少了请求,并且它只有一个事件处理程序。 fiddle
我通常不结合这些类型的事件到身体的,因为它得到坚韧与事件冒泡。我建议做系统显示处理接近事件的固定覆盖:
jQuery(document).ready(function() {
jQuery('.hour_dropdown').hide()
$('.more').on('click', function() {
$('.hour_dropdown').fadeToggle(200);
$('#overlay').show();
});
$('#overlay').on('click', function() {
$('.closeable').fadeOut();
$(this).hide();
});
});
给一个ID,跨度是这样的:<span id="more" class="more">
和修改您的JS代码:
jQuery(document).ready(function() {
jQuery('.hour_dropdown').hide()
jQuery('.more').click(function() {
if ($('.hour_dropdown').is(':hidden')) {
$('.hour_dropdown').fadeToggle(200);
} else {
$('body').click(function(event) {
if(event.target.id!="more")
$('.hour_dropdown').fadeOut(200);
});
}
});
});
您更新的提琴现在看起来像这样:Demo
- 1. 通过点击正文关闭Sidemenu
- 2. jquery切换将不会关闭点击
- 3. 当点击切换时,jquery所有div打开和关闭
- 4. 通过点击外部关闭div
- 5. jQuery - 点击切换div类
- 6. 打开/关闭div切换和点击外部div
- 7. jQuery通过点击任意位置关闭DIV页面
- 8. jquery:通过触发和图像点击mechanisim来切换div
- 9. jquery切换div,允许点击div的外部关闭,也允许div内的所有内容可点击
- 10. jQuery切换打开/关闭div的
- 11. 点击关闭切换菜单
- 12. 对外界关闭切换点击
- 13. 第二次点击关闭切换格
- 14. Boostrap侧切换菜单,点击关闭
- 15. jquery切换关闭
- 16. jquery关闭切换
- 17. 点击jquery切换文本
- 18. Div切换关闭按钮
- 19. 关闭切换从DIV
- 20. jQuery点击关闭div(显示)
- 21. 关闭JQuery图片点击外部div
- 22. jquery关闭点击事件菜单div
- 23. jquery点击添加类和切换div
- 24. jQuery:通过点击除DIV本身之外的任何地方关闭DIV?
- 25. 使用jQuery打开和关闭切换元素点击最近的div
- 26. jQuery点击切换
- 27. jQuery切换点击
- 28. 点击切换(jQuery)
- 29. jQuery切换点击
- 30. jQuery的切换 - 应关闭只在点击标题
我不想听起来像一个混蛋,但答案你接受的是有点过于复杂 – 2012-08-08 00:40:40