我正在使用jQuery的map
函数进行DOM操作。使用这个我试图将一个元素附加到表单。
它只工作一次;这意味着我只在if
部分获得结果,我无法从else if
部分获得任何值。我的功能出了什么问题,或者我的做法是错误的?
我的数据:
"fields":[
{
"id":"firstname",
"label":"First Name",
"name":"fname",
"type":"text",
"value":""
},
{
"id":"email",
"label":"Email",
"name":"email",
"type":"text",
"value":""
},
{
"id":"countries",
"label":"Country",
"name":"countries",
"type":"select",
"options":[
{
"value":"",
"text":"Select Country"
},
{
"value":"in",
"text":"India",
"selected":"true"
},
{
"value":"us",
"text":"United Stated"
},
{
"value":"uk",
"text":"United Kingdom"
},
{
"value":"cn",
"text":"Canada"
}
]
},
{
"id":"submit",
"name":"submit",
"type":"submit",
"value":"Submit"
}
]
我的功能:
var processModules = function (mData) {
$.map(mData, function (val,i) {
$(val.container).append(
$(val.type === 'content' || val.type === 'navigation' ?
$('<div />',{
'class':val.attributes['class'],
id:val.attributes.id})
.append(val.title ? $('<h2 />',{text:val.title}) : "")
.append(val.subtitle ? $('<h3>',{text:val.subtitle}) : "")
:
val.type === 'form' ? $('<form />',{
id:val.attributes.id,
'class':val.attributes['class'],
action:val.action,
name:val.name
})
.append($('<legend />',{text:val.title}))
.append(
$.map(val.fields, function (val,i) {
var element;
if(val.id) {
console.log(val.id); // getting values and appending elements
}
if (val.label) {
element = $('<label />',{text:val.label}); // am not getting any value here..
}
if (val.type) {
element = $('<input />',{id:val.id}) // I am only getting value here..
}
} )
)
: ""));
} )
}
问题是什么?任何人都可以帮助我吗?
答案 0 :(得分:1)
else if
。例如:
if (true) {
// This code gets run
}
else if (true) {
// This code never will
}
考虑到这一点,将if语句更改为如下所示:
if(val.id) {
console.log(val.id);
}
if (val.label) {
console.log(val.label);
}
if (val.type) {
console.log(val.type);
}
答案 1 :(得分:1)
您的代码按预期工作,如果第一个if计算结果为true,则不会访问else部分。一旦if(val.id)
返回true,将跳过所有其余的