2017-08-23 119 views
0

我有一個JSON文件。最初它看起來像這樣:從json填充ID的下拉列表

{"marki": [ 
     { "name": "Access", "models": [ "Max", "Acce" ] }, 
     { "name": "Adly", "models": [ "Adly1", "Adly2" ] }] 
} 

不幸的是,這是一件壞事,因爲型號名稱重複。所以我爲每個模型添加了一個ID。我從Wordpress數據庫獲得的ID。 我犯了這樣的一個JSON:

{"marki": [ 
      { "name": "Access", "models": [ { "name":"Max", "id": 6206}, { "name":"Acce", "id": 6207} ] }, 
      { "name": "Adly", "models": [ { "name":"Adly1", "id": 6208}, { "name":"Adly2", "id": 6209} ] }] 
} 

對於我有一個JS文件:

jQuery(document).ready(function($){ 
    var marki = {}; 
    var json = $.getJSON(wpp.uploads_dir + '/motocykle-marki.json'); 
    json.done(function(data){ 
     $.each(data.marki, function (index, marka){ 
      marki[marka.name] = marka.models; 
     }); 
     console.log(marki); 
    }); 
    $(document).on('change', '[data-wpt-field-title~="motocykle-marka"]', function(){ 
     var selected_model = $(this).find(":selected").text(); 
     $('[data-wpt-field-title~="motocykle-model"] > option').each(function(){ 
      if($.inArray($(this).text(), marki[selected_model]) == -1){ 
       $(this).hide(); 
      } else { 
       $(this).show(); 
      } 
     }); 
    }); 
}); 

這JS寫原來的JSON版,現在我不知道如何將它轉換到一個新版本。現在第二個下拉菜單什麼也沒有顯示

Edition -------------------------------------------- -----

這裏有一個解決問題的辦法:

jQuery(document).ready(function($){ 

    var marki = {}; 
    var json = $.getJSON(wpp.uploads_dir + '/motocykle-marki.json'); 

    json.done(function(data){ 
     $.each(data.marki, function (index, marka){ 
      marki[marka.name] = marka.models; 
     }); 
     console.log(marki); 
    }); 

    $(document).on('change', '[data-wpt-field-title~="motocykle-marka"]', function() { 
    $('[data-wpt-field-title~="motocykle-model"] > option').hide(); 

    var selected_model = $(this).find(":selected").text(); 
    var models = marki[selected_model]; 
    for (var i in models) { 
     var model = models[i]; 

     $('[data-wpt-field-title~="motocykle-model"] > option[value="' + model.id + '"]').show(); 
    } 
    }); 

}); 

回答

0

替換此行:

if($.inArray($(this).text(), marki[selected_model]) == -1){ 

有:

if($.inArray($(this).text(), marki[selected_model].map(function(a){return a.name;})) == -1){ 
+0

這是更好的,因爲第二選擇現在顯示模型。但即使它們不屬於該品牌,它仍會顯示具有相似名稱的所有型號。就像剛開始時一樣。 –