2012-09-12 6 views
1

나는 목록을 사용하여 드롭 다운 플러그인을 만들고 있습니다. 나는 내가 같은 페이지에 여러개의 드롭 다운을 가지고 있다면 내가 닫을 것을 촉구하는 것을 제외하고는 다른 모든 것들을 닫고 싶다는 것을 제외하고는 그것이 작동하고있다.jquery를 사용하는 드롭 다운 플러그인

(function($){ 

    $.fn.dropDown = function(options) { 
     var defaults = { 
      wrapper: 'ul' 
     } 

    var settings = $.extend({}, defaults, options); 


    $(this).find(settings.wrapper).hide(); 
    $(this).css("cursor","pointer"); 


     $(this).click(function(event) { 
      elem= $(this); 
      elem.find(settings.wrapper).toggle(); 
      elem.find("span").toggleClass("menuOpen"); 
      event.preventDefault(); 
      event.stopPropagation(); 
     }); 

     $(document).click(function() { 
       elem.find("span").removeClass("menuOpen"); 
       elem.find(settings.wrapper).hide(); 
       elem.find(settings.wrapper).find("ul").show(); 
     }); 
    }; 

})(jQuery); 

및 플러그인은 다음과 같이 호출됩니다 :

$('.dropdown').dropDown(); 

모든 아이디어를 여기

내가 가진 무엇인가? 사전에

감사합니다, 호세

답변

0

나는 너무 오래 전에 비슷한 일을했다. 이 같은

가 실행될 때 코드에 의해 선택할 수있는 모든 다른 메뉴 그들에게 사용자 정의 클래스를 제공하는 것입니다 만드는 방법, 뭔가 :

$(this).addClass("__my_menu");

당신이 핸들이이 방법 플러그인이 설정 한 메뉴. 현재 하나에서 떨어져 모든 메뉴를 종료 할 때 그래서, 당신이 할 필요가있다 :

$('.__my_menu').not($(this)).hide();

또 다른 점은 document 클릭 핸들러에서, VAR elem가 그렇게 설정되지 않는 것입니다 아무것도하지 않을 것이다. 대신 $(this)을 사용해야합니다.

추가 읽기 :

사용 $.off 대신 $.click$.on (위 jQuery를 1.7에서와) : http://api.jquery.com/on/

$.not 및 기타 필터링 방법 : http://api.jquery.com/category/traversing/filtering/

이 도움이 희망과 행운을 빕니다.

관련 문제