在這個小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