在另一个函数内运行函数

时间:2016-07-06 23:20:24

标签: javascript jquery

如果我运行此代码:

var alts = {};
$('.grid ul').find('.lista-produtos:visible').each(function(){
  var classes2 = $(this).attr('class').split(' ');
  for (var i = 0; i < classes2.length; i++) {
      var matches2 = /^tipo\-(.+)/.exec(classes2[i]);
      if (matches2 != null) {
        var produto2 = matches2[1];
      }
    }
  if(!alts[classes2]){
      alts[classes2] = true;
      $('ul.filters').append('<li class="filter-produto">'+ produto2 +'</li>');   
  }  
});

作为一个函数,像这样:

function tipoProduto(){ 

var alts = {};
$('.grid ul').find('.lista-produtos:visible').each(function(){
      var classes2 = $(this).attr('class').split(' ');
      for (var i = 0; i < classes2.length; i++) {
          var matches2 = /^tipo\-(.+)/.exec(classes2[i]);
          if (matches2 != null) {
            var produto2 = matches2[1];
          }
        }
      if(!alts[classes2]){
          alts[classes2] = true;
          $('ul.filters').append('<li class="filter-produto">'+ produto2 +'</li>');   
      }  
});
}

并在此处致电:

$('.list-group-item').click(function(){
    var classes1 = $(this).attr('class').split(' ');
    for (var i = 0; i < classes1.length; i++) {
      var matches1 = /^ctrl\-(.+)/.exec(classes1[i]);
      if (matches1 != null) {
        var marca1 = matches1[1];
      }
    }

    $(this).addClass("active");
    $('.list-group-item').not(this).removeClass("active");

    if ($('.todos-produtos').hasClass("active")) {
    $('.lista-produtos').hide();
    $('.' + marca1).show();
    }
    else {
    var produto1 = $('li.filter-produto.active').text();
    $('.lista-produtos').not('.' + marca1 + '.tipo-' + produto1).hide();
    $('.' + marca1 + '.tipo-' + produto1).show()
    }

tiposProduto(); // CALLING IT HERE //

});
});

然后下面的代码不起作用:

$(document).ready(function(){   

$('.filter-produto').click(function() {
    var classes3 = $('.list-group-item.active').attr('class').split(' ');
    for (var i = 0; i < classes3.length; i++) {
      var matches3 = /^ctrl\-(.+)/.exec(classes3[i]);
      if (matches3 != null) {
        var marca2 = matches3[1];
      }
    }

    $(this).addClass("active");
    $('.filter-produto').not(this).removeClass("active");

    if ($(this).hasClass("todos-produtos")) {
    $('.' + marca2).show();
    }
    else {
    var produto3 = $(this).text();
    $(".lista-produtos").not('.tipo-' + produto3).hide();
    $('.' + marca2 + '.tipo-' + produto3).show();
    }
});
});

但如果我将第一个代码更改为:

$(document).ready(function(){

    var alts = {};
    $('.grid ul').find('.lista-produtos:visible').each(function(){
      var classes2 = $(this).attr('class').split(' ');
      for (var i = 0; i < classes2.length; i++) {
          var matches2 = /^tipo\-(.+)/.exec(classes2[i]);
          if (matches2 != null) {
            var produto2 = matches2[1];
          }
        }
      if(!alts[classes2]){
          alts[classes2] = true;
          $('ul.filters').append('<li class="filter-produto">'+ produto2 +'</li>');   
      }  
    });

});

然后第四个代码再次起作用。

问题是我需要上面的代码作为函数,就像我在第二和第三个例子中所展示的那样。

谢谢!

1 个答案:

答案 0 :(得分:0)

感谢您的回复。我发现了问题。

附加对象未被功能识别。这就是$('.filter-produto').click(function() {无效的原因。