我需要以下物品:
var myObj={
"rules": {
"email": {
"required": true,
"email": true,
"remote": {
"url": "check-email.php",
"type": "post",
"data": {
"someName1": function() {
return $( '#someID1' ).val();
},
"someName2": function() {
return $( '#someID2' ).val();
},
"someName3": "bla"
}
}
}
}
};
要创建它,我只有一些JSON,如下所示:
{
"rules": {
"email": {
"required": true,
"email": true,
"remote": {
"url": "check-email.php",
"type": "post",
"data": {
"someName1": {"id":"someID1"},
"someName2": {"id":"someID2"},
"someName3": "bla"
}
}
}
}
}
或
{
"rules": {
"email": {
"required": true,
"email": true,
"remote": {
"url": "check-email.php",
"type": "post",
"data": {
"someName1": {"function":"return $( '#someID1' ).val()"},
"someName2": {"function":"return $( '#someID2' ).val()"},
"someName3": "bla"
}
}
}
}
}
或类似的东西。
如何实现这一目标?
答案 0 :(得分:3)
您可以使用Function
即时创建功能。假设你有第二个JSON结构:
d = obj.rules.email.remote.data;
Object.keys(d).forEach(function(key) {
d[key] = new Function(d[key].function);
//Note: You might want to check if d[key].function exists before using it.
});
答案 1 :(得分:2)
对于这种模式:
{
"rules": {
"email": {
"required": true,
"email": true,
"remote": {
"url": "check-email.php",
"type": "post",
"data": {
"someName1": {"id":"someID1"},
"someName2": {"id":"someID2"},
"someName3": "bla"
}
}
}
}
}
可以完成:
for(var key in myObj.rules.email.remote.data){
if(myObj.rules.email.remote.data[key].id){
myObj.rules.email.remote.data[key] = function(){
return $('#'+myObj.rules.email.remote.data[key].id).val();
}
}
}
如果电子邮件没有硬编码,则可以按以下方式完成:
for(var key1 in myObj.rules){
for(var key in myObj.rules[key1].remote.data){
if(myObj.rules[key1].remote.data[key].id){
myObj.rules[key1].remote.data[key] = function(){
return $('#'+myObj.rules[key1].remote.data[key].id).val();
}
}
}
}