2016-07-06 10 views
0

私はこのコードを実行する場合は、次の関数としてRun関数

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番目と3番目の例で示したように、関数として上のコードが必要です。

ありがとうございます!

+2

テストケースをもっと簡単にしてください。問題に直接関係しないコードをすべて削除します。 – NeilK

+0

コード4では、まずコード2から関数を呼び出します。 – Malk

答えて

0

ご回答いただきありがとうございます。私は問題を発見した。

追加されたオブジェクトが関数によって認識されませんでした。だから$('.filter-produto').click(function() {は機能しませんでした。

関連する問題