2016-07-06 26 views
0

如果我运行此代码:另一个函数内部运行功能

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

}); 

然后第四代码工作一次。

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

谢谢!

+2

请让测试案例更简单。消除所有不直接与问题相关的代码。 – NeilK

+0

在代码4中,首先调用代码2中的函数。 – Malk

回答

0

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

附加的对象没有被功能识别。这就是为什么$('.filter-produto').click(function() {无法正常工作。

相关问题