2011-09-09 23 views
0

我想關閉一個轉換下拉菜單,當有人在網站上的其他地方點擊。只有當它被發現是開放的。然而,下面的代碼片段似乎失火併鎖定了瀏覽器。所以我認爲我會犯這個錯誤。有沒有更好的方法來處理這個概念?jquery或javascript沿着隱藏元素,如果可見時點擊其他人的身體其他

$(document.body).click(function() { 
    if($('#ztsWidgetMenu').is(':visible')) 
    { 
     $('#addDashWidgetBox').click(); 
    } 
}); 

編輯

我做了一個功能上的click事件火了現在這兩個元素將其打開,身體點擊打電話,冒泡與不過我跑停止現在變成另一個問題。爲了打開菜單,我需要點擊至少2次meun項目才能打開菜單。如果我點擊相同的按鈕來關閉它,然後我堅持了下來開,除非我的身體點擊別的地方現在..

function openCloseWidgetMenu() 
{ 
     dashboardJSON.widgets.sort(sortJSONresultsByWidgetID); 
     if(widgetMenuShowHide == "hide") 
     { 
      widgetMenuShowHide = "shown"; 
      $.each(dashboardJSON.widgets, function(x) 
      { 
       if(dashboardJSON.widgets[x].show == "no"){$('#ztsWidgetMenu ul').append('<li class="widgetMenuItems" rel="'+dashboardJSON.widgets[x].wigetID+'" widgetcolor="'+dashboardJSON.widgets[x].widgetColor+'">'+dashboardJSON.widgets[x].widgetTitle+'</li>');} 
      }); 
      $('#ztsWidgetMenu').css({"display":"block", "position":"absolute", "left":($('#addDashWidgetBox').position().left-35) + "px", "top":($('#addDashWidgetBox').offset().top+$('#addDashWidgetBox').height()+10) + "px"}); 
     } 
     else 
     { 
      $('#ztsWidgetMenu ul li').remove(); 
      $('#ztsWidgetMenu').hide(); 
      widgetMenuShowHide = "hide"; 
     } 
} 
$('#addDashWidgetBox').live({ 
    click: function() 
    { 
     //e.preventDefault(); 
     openCloseWidgetMenu(); 
    }, 
    mouseover: function() 
    { 
     $('#addWidetMenuBar').css({"background-position":"-0px -697px"}); 
     $(this).css({"color":"#000"}); 
    }, 
    mouseout: function() 
    { 
     $('#addWidetMenuBar').css({"background-position":"-0px -662px"}); 
     $(this).css({"color":"#5a5a5a"}); 
    } 
}); 

$(document.body).click(function() { 
    if($('#ztsWidgetMenu').is(':visible')) 
    { 
     openCloseWidgetMenu(); 
    } 
}); 

編輯2

我有固定我的問題了大多數情況下,除了現在..當我點擊元素我要點燃功能顯示菜單的身體點擊註冊在同一時間,所以現在它點擊相同的功能關閉兩次。

回答

2

我假設這是由Event Bubbling引起的..

#addDashWidgetBox被「點擊」您的代碼,它也導致body被點擊這使你在一個無限循環。

只是更具體的瞭解要發生什麼......

而是模擬用戶輸入(通過用戶手冊.click())的,只是更加明確

$(document.body).click(function() { 
    if($('#ztsWidgetMenu').is(':visible')) 
    { 
     //Call functions being fired by the simulated click directly... 
    } 
}); 
+0

是啊我正在計算它的冒泡也..試圖找到一種方法來彈出該泡沫並保持在控制之下 – chris

+0

不幸的是,模擬該點擊正在觸發另一組功能.. – chris

0

我會嘗試把以下在ontslid事件中ztsWidgetMenu

if($('#ztsWidgetMenu:visible')) { 
    $('#ztsWidgetMenu').hide(); 
} 

或類似的東西。 jQuery選擇器只會在可見時選擇它。

相關問題