我有许多html输入和一个包含大量信息的非常大的对象。
其中许多输入直接链接到对象中的特定字符串。 E.g:
<input name="alpha_beta_gamma" type="input" val="newstring" />
和
obj = {
alpha: {
beta: {
gamma: 'oldString'
}
},
stuff2: {
whatever: {
weathertoday: 'rainy',
sun: false
},
phone: '1234567'
}
}
值“sun”的复选框字段的名称为“stuff2_whatever_sun”,而“phone”字段的名称为“stuff2_phone”,“gamma”输入字段的名称为“alpha_beta_gamma”。
希望你们能得到我:)
...我将使用jQuery focusout事件:
$('input.specialClass').live('focusout', function(){
obj[whatevercomeshere] = $(this).val();
});
答案 0 :(得分:2)
$('input.specialClass').live('focusout', function(){
var name = $(this).attr('name');
var o = obj, parts = name.split("_");
$.each(parts, function(k, v) {
if(k == parts.length - 1) {
o[v] = $(this).val();
} else {
o = o[v];
}
});
});
答案 1 :(得分:1)
您可能想要使用eval
:
$('input').each(
function() {
var $this = $(this);
$this.val(eval("obj." + $this.attr('name').replace(/_/g, '.'));
}
);
答案 2 :(得分:0)
这是一种方法:
var obj = {},
name2json = function(o, name, val){
var prop = name.splice(0, 1);
o[prop] = o[prop] || {};
if(name.length === 0){
o[prop] = val;
}else{
name2json(o[prop], name, val);
}
};
$('input.specialClass').live('focusout', function(){
name2json(obj, this.name.split('_'), this.value);
});