jQuery将click事件合并到一个DRY代码块中

时间:2015-07-03 02:31:57

标签: javascript jquery

这两个代码块基本上只是用不同的元素相同如何将它们合并到单个可重用脚本中

indicies = [[i for i,x in enumerate(list1) if x == k] for k in replacements.keys()]
# indicies is equal to [[0, 4], [2, 3]]

2 个答案:

答案 0 :(得分:0)

使用逗号:

$('.menu-button, .cart-button').on('click', function(e) {
    var param = $(this).is('.menu-button') ? "sidebar" : "cart";
    e.preventDefault();
    e.stopPropagation();
    $('.cart-open').removeClass('cart-open');
    $('.sidebar-open').removeClass('sidebar-open');
    $('#' + param).toggleClass(param + '-open');

    $(document).one('click', function closeMenu (e){
        //console.log("DF");
        if($("#" + param).has(e.target).length === 0){
            console.log("DF");
            $("#" + param).removeClass(param + '-open');
        } else {
            $(document).one('click', closeMenu);
        }
    });
});

编辑:另外,使用简写if语句来查看其侧边栏或购物车是否被点击,在其余部分使用。

答案 1 :(得分:0)

尝试为processMenu事件定义单个处理程序click;使用elem

在处理程序中设置选择器event.target.className
    var processMenu = function processMenu(e) {
      var elem = $(e.target.className === "menu-button" ? "#sidebar" : "#cart");
      e.preventDefault();
      e.stopPropagation();
      $("#sidebar").toggleClass("sidebar-open");
      $("#cart").removeClass("cart-open");

      $(document).one("click", function closeMenu (evt){
        //console.log("DF");
        if(elem.has(evt.target).length === 0){
            console.log("DF");
            elem.removeClass("sidebar-open");
        } else {
            $(document).one("click", closeMenu);
        }
      });
    };

    $(".menu-button, .cart-button").on("click", processMenu);