我正在将表单保存为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 :(得分: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;
}
});