2013-03-11 69 views
2

我想將字符串數組從服務器轉換爲客戶端字符串,不使用JSON或外部庫。 服務器端將String[] xArray = new String[] { "1", "2", "3" }轉換爲"1, 2, 3"以進行客戶端呈現。 以下JavaScript函數負責解析服務器字符串並將複選框與數組值進行比較。匹配時,必須檢查通訊記錄複選框。Java String to JavaScript String Array複選框檢查

function loadCheckBoxes() {   
    var ids = '<%= request.getSession().getAttribute("idsFromServer") %>';  
    if (ids != null && ids !== '') {    
     var idsArray = String.valueOf(ids).indexOf(',') == -1 ? [ids] : ids.split(','); 
     var checkboxes = document.getElementsByClassName('gridIds'); 
     for (var i = 0; i < checkboxes.length; i++) { 
      var index = idsArray.indexOf(checkboxes[i].value); 
      if (index >= 0) { 
       var foundId = idsArray[index];   
       if (checkboxes[i].value == foundId) { 
        checkboxes[i].checked = true; 
       } 
      } 
     } 
    } 
} 

這是測試執行的JSFiddle

預期結果:拆分我的數組後,必須檢查對應的複選框。

+1

你代碼示例d從鏈接JSFiddle iffers ...在您的文章中的代碼很好:http://jsfiddle.net/mjvLd/16/ – mellamokb 2013-03-11 16:30:49

+0

@mellamokb小提琴實際上不起作用。請檢查評論。對於不工作的解決方案,它應該檢查「9」和「133」複選框。 – axcdnt 2013-03-11 16:32:25

+0

不,我的意思是功能不同。 JSFiddle代碼中存在一個不存在於發佈代碼中的錯誤。在JSFiddle中,使用'ids [index]'返回字符串的索引,而不是拆分數組。但是在上面的代碼示例中,這是正確的,因爲您將拆分數組存儲在單獨的變量「idsArray」中。如果您要提供演示,則需要使用相同的代碼。 – mellamokb 2013-03-11 16:33:00

回答

4

兩個問題的解決方案:

  • 你應該','
  • VAR代替對', '分裂foundId = ids[index]; - >應該是ids.split(', ')[index];

Working solution

function checkSelected() { 
    var ids = "9, 133"; 
    var idsArr = ids.split(", "); 
    var checkboxes = document.getElementsByClassName('gridCheck'); 
    for (var i = 0; i < checkboxes.length; 
     var index = idsArr.indexOf(checkboxes[i]. 
     if (index >= 0) { 
      var foundId = idsArr[index]; 
      if (checkboxes[i].value == foundId) { 
       checkboxes[i].checked = true; 
      } 
     } 
    } 
} 
+0

+1儘管我認爲修改id值而不是依賴分隔符總是在逗號後面有一個空格會更好。 – mellamokb 2013-03-11 16:37:53

+1

我會這樣做'.split(/,\ s * /);' – leonbloy 2013-03-11 16:41:34