2016-11-14 27 views
-2

我在下拉菜單中有一個事件。現在每當發生這種事件時,我必須讀取表格數據,並對其進行修改。我正在使用$("table").each(function(){});函數讀取表數據,並再次使用相同的代碼對其進行修改。但是這兩個函數都在並行工作,而我希望它們能夠一個接一個地執行。 我的代碼看起來像。一個接一個地在javascript中調用相同的事件

$(document).on('change','#rank-q1',function(){ 
    $('#rank-q2').val('rank-asc'); 
    var data=$(this).val().split('-'); 
    var i=-1; 
    var j=0; 
    var k=0; 
    //console.log(results); 
    $("#tbody-emps tr").each(function(){ 
     k++; 
     if($(this).find('td').length>6){ 
      var temp=alasql('select '+data[1]+' from '+data[0]+' where '+tableChoice[data[0]]+' = ?',[results[i][j][1]])[0]; 
      if(data[1]=='birthday' || data[1]=='grad'){ 
       results[i][j][0]=Date.parse(temp[data[1]]); 
      }else{ 
       results[i][j][0]=temp[data[1]]; 
      } 
      results[i][j][2]=$(this).html(); 
      console.log(results[i][j][2]); ///Note here 
     }else{ 
      if(i>=0){ 
       results[i].sort(function(a,b){ 
        return a[0]>b[0]?-1:(a[0]<b[0]?1:0); 
       });    
      } 
      i++; 
      j=0; 
     } 
    }); 
    results[i].sort(function(a,b){ 
     return a[0]>b[0]?-1:(a[0]<b[0]?1:0); 
    }); 

    console.log(results); 

    var i=-1,j=0; 
    $("#tbody-emps tr").each(function(){ 
     if($(this).find('td').length>6){ 
      $(this).html(results[i][j][2]); 
      j++; 
     }else{ 
      i++; 
      j=0; 
     } 
    }); 
    console.log(results); 
}); 

由於$('table').each(function(){});正在使用兩次它是在同一時間執行。我該怎麼辦? 供參考:所有console.log(results)都給我結果數組相同的舊值,而當我使用console.log(results[i][j][2])它顯示我更新的信息。這就是爲什麼它看起來像這些功能在同一時間運行,沒有更新。

+1

他們將執行一個其他後。 – Rajesh

+0

他們不能並行工作,javascript是單線程向我們展示更多的代碼[mcve],並提供一個適當詳細的問題陳述以及你正在試圖用這個代碼做什麼的真實解釋。看到[問] – charlietfl

+0

很難評估這種精神狀態,而無法在開發工具中進行調試。在jsfiddle,codepen,plunker或其他沙箱中的演示將有所幫助 – charlietfl

回答

0

做到這一點

$('table').each(function(){ 
    //Some data capture and alter data 
}).each(function(){ 
    //Modification in table data. 
}); 
+0

這不會改變'each'實例與OP代碼的執行順序,它的有效做法是減少對錶集合的dom搜索 – charlietfl

相關問題