在另一个函数中运行函数

Run function inside another function

本文关键字:函数 运行 另一个      更新时间:2023-09-26

如果我运行这段代码:

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>');   
      }  
    });
});

然后第 4 个代码再次工作。

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

谢谢!

感谢您的几次回复。我发现了问题所在。

函数无法识别追加的对象。这就是$('.filter-produto').click(function() {不起作用的原因。