2011-09-09 4 views
0

다른 사용자가 사이트의 다른 곳을 클릭하면 메뉴 이동을 닫으려고합니다. 그것이 열려있는 것으로 판명 된 경우에만. 그러나 아래 발췌 문장은 브라우저에 불을 붙이고 잠그는 것처럼 보입니다. 그래서 나는이 잘못을 저지르고 있다고 생각합니다. 이 개념을 처리하는 더 좋은 방법이 있습니까?jquery 또는 javascript는 몸체를 클릭 할 때 표시되면 숨김 요소를가집니다. else

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

편집

내가 요소 모두를 열려면 지금 클릭 이벤트에 해고 할 수있는 기능과에 전화를 몸 클릭을 만든 버블은 그러나 내가 실행과 중지 지금 또 다른 문제로. 메뉴를 열려면 메뉴를 열려면 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

#addDashWidgetBox이 당신의 코드에 의해 "클릭"입니다

, 또한 body가 무한 루프에 당신을두고하는 클릭 수의 원인 .. Event Bubbling에 의해 발생되고있다.

대신 (수동 .click()를 통해) 사용자의 입력을 시뮬레이션

, 그냥 더 명시

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

음침한 소리도 들리고 있습니다. 거품을 터뜨려 제어 할 수있는 방법을 찾고 있습니다. – chris

+0

불행히도 그 클릭을 시뮬레이트하는 것은 다른 기능을 발사하고 있습니다. – chris

0

내가두고 다음을 시도 할 수 ... 오류가 발생하는 일에 대해 더 구체적으로 ztsWindgetMenu의 onBlur 이벤트에서

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

또는 이와 비슷한 것입니다. jQuery 선택기는 표시되는 경우에만 선택합니다.