2014-07-23 77 views
1

我將窗體保存爲一個json對象,當刷新或重新訪問頁面時,該窗體用於重建表單。它運作良好,除了我的問題是在名稱屬性之後用「[]」指定複選框。選擇名稱爲[]和值的複選框

我的目標:{"product":{"checkboxname":["value1","value2"]}}

// Reset form values from json object 
$.each(formStateObjects[presentFormElementID], function(name, val){ 

    var $el = $('[name="'+name+'"]'); 
    var type = $el.attr('type'); 

    switch(type){ 
     case 'checkbox': 
      $el.attr('checked', 'checked'); // Only works for checkboxes with unique name 
      break; 
     case 'radio': 
      $el.filter('[value="'+val+'"]').attr('checked', 'checked'); 
      break; 
     default: 
      $el.val(val); 
    } 
}); 

我需要以某種方式改變我的複選框選擇,或使一個新的只爲共​​享名稱複選框。但我無法弄清楚如何。

----編輯:更新我的代碼------------------------------------- ----

我使用下面的代碼工作,雖然現在它不能確保檢查正確的名稱。

// Reset form values from json object 
$.each(formStateObjects[presentFormElementID], function(name, val){ 

    var $el = $("[name=" + name + "]"); 
    var type = $el.attr('type'); 


    // If we have a checkbox name with many values 
    if(val instanceof Array) { 
     checkboxArrayValues = val; 
     $.each(checkboxArrayValues, function(intValue, currentValue) { 
      // Refine the selector checking for name 
      var $hit = $("[value=" + currentValue + "]"); 
      $hit.prop('checked', true); 
     }); 
    } 

    switch(type){ 
     case 'checkbox': 
      $el.prop('checked', true); 
      break; 
     case 'radio': 
      $el.filter('[value="'+val+'"]').prop("checked", true); 
      break; 
     default: 
      $el.val(val); 
    } 

}); 

回答

0

簡直不會工作嗎?

$.each(formStateObjects['product'], function (name, val) { 
    var $el = $('[name^="' + name + '"]'); 
    var type = $el.attr('type'); 

    switch (type) { 
     case 'checkbox': 
     case 'radio': 
      Object.prototype.toString.call(val) === '[object Array]' ? [].map.call(val, function(val){ 
       $el.filter('[value="' + val + '"]').prop('checked', true); 
      }) : $el.filter('[value="' + val + '"]').prop('checked', true); 
      break; 
    } 
}); 

DEMO

+0

謝謝,但是當複選框的名字在名稱[]格式這是行不通的。 這是我的問題,對於每個複選框具有唯一名稱的複選框,代碼有效。 查看:http://jsfiddle.net/25Cn5/ –

+0

@JohanDahl看到我的更新演示 –

+0

是的,雖然感覺有風險,但現在它不再尋找完全匹配。請參閱:http://jsfiddle.net/kLyq3/ 我試着做這個完全匹配: var $ el2 = $(「[name =」+ name +'[]'+「]」); 但這不是一個有效的選擇器。 –