2017-04-12 6 views
0

JQUERYのループで問題が発生しました。私はget(取得)のおかげでいくつかのデータを(JSON形式で)検索します。

これらのデータを「optgroup」のドロップダウンリストに挿入したいと思います。しかし、私はoptgroupをすることに問題があります。

私はOPTGROUPを挿入する前に、$ .eachループ内の現在の値と前回値を比較したいと思います!

=>現在の値(v.SG_CODE)IF = previous_value(v.SG_CODE)その後、optgroupを追加してください

しかし、私はそれをどうやって入手するのか分かりません。手伝っていただけませんか ?

私はこのコードを持っている:あなたの助けを事前に

function myFunction (param){ 

     var select = $("#myselect"); 
     select.empty(); 
     select.append(
      new Option('Loading...', '-1') 
     ); 
     var jqXHR = $.getJSON("myCFC.cfc", { 
      "method" : "myMethod", 
      "param": param, 
     }); 

     setTimeout(function(){ 
     // If status in pending, call the method fail 
      if (jqXHR && jqXHR.state() === "pending"){ 
       jqXHR.abort(); 
      } 
     }, 3000); // 3s 

     jqXHR.done(function(data, textStatus, jqXHR){ 
      // success - Treatment of the request 
      //console.log(data, textStatus, jqXHR); 
      select.empty();  
      console.log(data.length); 
      if(data.length>0){ 
       select.show();      
       $.each(data,function(k,v){   
        //alert(v.ID + " --- " + v.VALUE);        
         select.append('<optgroup label="' + v.SG_CODE +'">');  
         select.append('<option value="' + v.ID + '">' + v.SUBJECT_CODE + '</option>');  
         select.append('</optgroup>');          
       }); 
      }else{ 
       select.hide(); 
      } 
     }); 

     jqXHR.fail(function(jqXHR, textStatus, errorThrown){ 
      // AJAX Request failed 
      console.log(jqXHR, textStatus, errorThrown); 
     }); 

     jqXHR.always(function(jqXHR, textStatus){ 
     //console.log(jqXHR, textStatus); 
     }) 
    } 

感謝を。

よろしく、

セブ

+0

に単に最後のキーを格納し、それを行うことができますか? –

+0

私はv.SG_CODE [currentrow]とv.SG_CODE [currentrow-1]をoptgroupを追加する前に比較したいと思います:select.append( '); – coeurdange57

答えて

0

あなたがして、以前の値にアクセスすることができますゼロのために以前の要素が存在しないとして、非ゼロであると

data[k-1].SG_CODE 

しかし、最初のテストのkSG_CODEまたは他のプロパティを参照すると例外が発生します。だからあなたのifは、次のようになります。

if (k == 0 || v.SG_CODE != data[k-1].SG_CODE) { 
    // ... add 
} 
+0

データがオブジェクトの場合、これは機能しません。これは配列でのみ動作します。 –

+1

@Miqdad Ali、コードに 'if(data.length> 0){'があるので、配列のようです。非配列オブジェクトは、理論的には数値の 'length'プロパティを持つことができますが、' length.SG_CODE'を持たないので、列挙できない 'length'プロパティでなければなりません。あなたが私に尋ねるならば、かなりストレッチ。 – trincot

0

最も単純な方法ですが、あなたは一時変数

正確にあなたが比較をしたいん
var lastKey = -1 
$.each(data,function(k,v){ 

    if(data[lastKey]. SG_CODE !== v. SG_CODE){ 
     //add to group 
    } 
    lastKey = k; 
} 
+0

これは最初の反復でエラーを生成します。 – trincot

関連する問題