2012-08-24 53 views
0

我正在映射一个对象,并追加对象的元素,而我映射的元素我检查对象的值,并适当地附加元素。在我的函数中,我相信所有的都是正确的,但是最后的'if'条件只是附加元素,其余条件不会附加任何东西......对此的修正是什么?jQuery的附加问题与多个元素的条件功能

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.label) { 
         element = $('<label />',{text:val.label}); // it is not appending 
        } 
        if (val.type) { 
         element = $('<input />',{id:val.id}) // only this is appending, if i place anything after this, only the last condition appends.. any what is the issue? pls check my json tree in the jsfiddle. 
        } 
        return element; 
       }) 
      ) 
      : "")); 
    }) 
} 

jsfiddle here for json

在此先感谢。

回答

1

构成一组元素。 将你的元素推入该数组中并附加返回该数组。

改变这种

$.map(val.fields, function (val,i) { 
    var element; 
    if (val.label) { 
     element = $('<label />',{text:val.label}); 
    } 
    if (val.type) { 
     element = $('<input />',{id:val.id}) 
    } 
    return element; 
}) 

$.map(val.fields, function (val,i) { 
    var elements = []; 
    var element; 
    if (val.label) { 
     element = $('<label />',{text:val.label}); 
     elements.push(element); 
    } 
    if (val.type) { 
     element = $('<input />',{id:val.id}) 
     elements.push(element); 
    } 
    return elements; 
}) 
0

看起来好像你正在覆盖元素在每个if条件。这就是为什么只有最后一个条件才算得上。

+0

你可以给我解决了这个.. – 3gwebtrain

+0

的情况下,如果我安慰的数据,我得到所有提交的数据 – 3gwebtrain