2016-04-08 7 views
1

私はjsonから値を取得しているドロップダウンを持っていますが、私のjsonファイルはいくつかの繰り返し値を持っているので、値をフィルタリングすることができました。私はいくつかのより多くのコードが含まれていたときにそれが再び...ドロップダウン内で繰り返し値を取得する

$.ajax({ 
    url: "data.json, 
    dataType: "json", 
    success: function(obj) { 
     var jsObject = obj; 
     var usedNames = []; 

     $('<option>', { 
      text: 'Select your Option', 
      value: '', 
      selected: 'selected', 
      disabled: 'disabled' 
     }).appendTo('#dropdown1'); 

     $('<option>', { 
      text: 'Select your List Option', 
      value: '', 
      selected: 'selected', 
      disabled: 'disabled' 
     }).appendTo('#checkbox'); 





     $.each(obj, function(key, value) { 
      if (usedNames.indexOf(value.name) == -1) { 
       $("#dropdown1").append("<option value=" + key + ">" + value.name + "</option>"); 
       usedNames.push(value.name); 
      } 
      /* $('<option>', { 
       text: 'Select your Option', 
       value: '', 
       selected: 'selected', 
       disabled: 'disabled' 
      }).appendTo('#dropdown1'); 
      */ 

      $.each(usedNames, function(index, value) { 
       $('<option>', { 
        text: value['name'], 
        value: index 
       }).appendTo('#dropdown1'); 
      }); 

     /* $('<option>', { 
       text: 'Select your List Option', 
       value: '', 
       selected: 'selected', 
       disabled: 'disabled' 
      }).appendTo('#listbox'); 
      */ 



      $('#dropdown1').change(function() { 
       $('#checkbox').empty(); 

       $('<option>', { 
        text: 'Select your List Option', 
        value: '', 
        selected: 'selected', 
        disabled: 'disabled' 
       }).appendTo('#checkbox'); 

       var selection = $('#dropdown1 :selected').text(); 
       $.each(jsObject, function(index, value) { 
        if (value['name'] === selection) { 
         $('<option>', { 
          text: value['attr001'], 
          value: 'attr001' 
         }).appendTo('#checkbox'); 
         $('<option>', { 
          text: value['attr002'], 
          value: 'attr002' 
         }).appendTo('#checkbox'); 
         $('<option>', { 
          text: value['attr003'], 
          value: 'attr003' 
         }).appendTo('#checkbox'); 

私のHTMLファイル

を値をフィルタリングされalook..Thankます。.. $(document).ready(function() {

変数usednamesを持って..please繰り返される値を取り始めました

<form name="myform" id="myForm"> 

    <select id="dropdown1"></select> 
    <!-- <select id="listbox"></select> --> 
    <input type="checkbox"> 
    <br> 

答えて

2

私は理由を知ると思います。あなたはこのコードを持っています:

  if (usedNames.indexOf(value.name) == -1) { 
       $("#dropdown1").append("<option value=" + key + ">" + value.name + "</option>"); 
       usedNames.push(value.name); 
      } 

これはうまく動作します(またはうまくいくはずです)。しかし、その後、あなたはこれを持っている:

  $.each(jsObject, function(index, value) { 
       $('<option>', { 
        text: value['name'], 
        value: index 
       }).appendTo('#dropdown1'); 
      }); 

あなたのコードを見たことで、jsObjectobjに等しくなるようです。したがって、最初の部分では、実際に繰り返し値をチェックしています。つまり、usedNamesという配列に入れます。

すぐに、jsObject#dropdown1を追加しているので、配列usedNamesを使用することは決してありません。値は一意にする必要があります。

作成した後にusedNamesを使用してください。さらに詳しい情報が得られない限り、objまたはjsObjectを忘れてください。

編集:usedNamesを作成するときは、ドロップダウンリストにも追加されます。したがって、usedNamesの内容を追加してから、jsObjectを追加しています。

+0

私のドロップダウンリストの属性1の後に私は次のように仕事をしています*あなたのオプションを選択してください*その後、その透かしが表示されている理由が来ています。 – siya

+0

@ siya 'usedNames'を作成した直後にこの行を追加しています。したがって、 'obj'の各オブジェクトに対して、あなたは「あなたのオプションを選択」を追加しています。 'each'関数の前にこの行を追加してください。私は何度も何度も値3回を取得していますなぜ私は再びいくつかのスペースがあるスクロールすると私の2番目のドロップダウンでの値は、このバグがどこにあるか私は正確に表示されていない – Keker

+0

は、うん、今..Justもう一つの解決しましたしかし、私はそれがあなたの最後の 'each'関数のものだと思います。 'jsObject'の各項目について、'#listbox'に 'jsObject'のすべてを追加しています。この 'each'関数を削除しようとするか、メインの' each'の外に置いてください...そのようなものです。ウルの提案のための – siya

2

一意の値の一覧を入力してから、ドロップダウンリストに割り当てることができます。

function unique(arr) { 
var u = {}, a = []; 
for(var i = 0, l = arr.length; i < l; ++i){ 
    if(!u.hasOwnProperty(arr[i])) { 
     a.push(arr[i]); 
     u[arr[i]] = 1; 
    } 
} 
return a; 

}

Most elegant way to create a list of unique items in JavaScript

関連する問題