1

我正在使用列表开发一个下拉插件。我让它工作了,除了如果我在同一页面上有多个下拉菜单,我想关闭所有其他下拉菜单,除了我触发关闭的那个。

这是我所拥有的:

(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();

有任何想法吗?

在此先感谢,何塞

4

1 回答 1

0

不久前我做了类似的事情。

使您的代码可以选择所有其他菜单的一种方法是在运行时为它们提供一个自定义类,如下所示:

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

这样您就可以掌握插件设置的菜单。因此,当您想要关闭除当前菜单之外的所有菜单时,您需要做的就是:

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

另一点是,在您的document点击处理程序中,没有设置 var,elem因此它永远不会做任何事情。你应该$(this)改用。

进一步阅读:

使用$.offand$.on而不是$.click(在 jQuery 1.7 及更高版本上):http ://api.jquery.com/on/

$.not和其他过滤方法:http ://api.jquery.com/category/traversing/filtering/

希望这会有所帮助,祝你好运。

于 2012-09-12T13:50:42.950 回答