2017-04-12 83 views
0

我在JQUERY循環中遇到問題。我感謝「獲取」查詢一些數據(以JSON格式)。

我想用「optgroup」在下拉列表中插入這些數據。但是我在做optgroup時遇到問題。

我想插入OPTGROUP之前比較在$。每個迴路當前值前值!

=>如果current_value(v.SG_CODE)= 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

在添加optgroup之前,我想比較v.SG_CODE [currentrow]和v.SG_CODE [currentrow-1]:select.append(''); – coeurdange57

回答

0

您可以通過訪問前值:

data[k-1].SG_CODE 

但首先測試ķ是非零,作爲零沒有以前的元素,並且引用SG_CODE或其他屬性會觸發異常。所以,你的if看起來是這樣的:

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

如果數據是一個對象,這將不起作用。這隻適用於數組。 –

+1

@Miqdad Ali,它似乎是一個數組,因爲代碼有'if(data.length> 0){'。一個非Array對象在理論上可以有一個數值'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

相關問題