2015-04-23 112 views
0

我想填充几个使用jQuery相同类的选择框。这是我的代码jquery选择选项默认选项文本

populateFieldMapping: function (data,obj) { 
     jQuery('.field-mapping select').each(function() 
     { 
      var option = '<option value="" data-custom-id="_select_">' + "please select a field" + '</option>'; 
      jQuery.each(data, function (i, res) { 
       option += '<option value="' + res.id + '" data-custom-id="' + dataID + '" data-custom-name="' + res.name + '">' + res.name + '</option>' 
      }); 
      $(this).html(option); 
      obj.select2(); 
     }); 
    }, 

我的HTML

<div class="field-mapping"> 
    <select id="podio-fields-mapping" class="form-control" tabindex="-1"> 
    </select> 
    <select id="podio-fields-mapping" class="form-control" tabindex="-1"> 
    </select></div> 

一切工作正常,除了我只收到“请选择一个字段”默认只有第一个选择框中选择。什么可能是错的? 我在每个选择框中获取所有值。

obj = $('.form-control'); 
+2

你能显示HTML使用jQuery来? –

+2

'obj.select2();'中的'obj',不能是'$(this).select2();'? –

+2

也使用.append而不是.html – mplungjan

回答

0

你的代码中有一些错别字,我怕:

jQuery('.field-mapping select').each(function() 
{ 
    var option = '<option value="" data-custom-id="_select_">' + "please select a field" + '</option>', // <- here you have a ',' instead of ';' 
    jQuery.each(data, function (i, res) { 
      option += '<option value="' + res.id + '" data-custom-id="' + dataID + '" data-custom-name="' + res.name + '">' + res.name + '</option>' 
    }}); // <- here you have an aditional '}' 
    $(this).html(option); 
}); 

请检查控制台错误。

您的标记中也不能有两个元素具有相同的id="podio-fields-mapping"

Working fiddle

+0

','不是语法错误。 '''是的,是的。我想'.html()'比'.append()'更好。不知道关于'obj.select2();' – Regent

+0

@mplungjan这个代码**实际上是一个循环内的**。 – DontVoteMeDown

+0

额外的}被错误地添加了。感谢您指出。我会尝试你提到的其他两件事,并让你知道。 –

0

这是方式更具有可读性和最充分的

populateFieldMapping: function (data,obj) { 
    jQuery('.field-mapping select').each(function() { 
    var options = []; 
    $sel = $(this); 
    options.push($('<option/>', 
    {"value":"", 
     "data-custom-id":"_select_", 
     "text":"please select a field"}) 

    jQuery.each(data, function (i, res) { 
     options.push($('<option/>', 
     {"value":res.id, 
     "data-custom-id":dataID, 
     "data-custom-name=":res.name, 
     "text":res.name}); 
    }); 
    $sel.empty().append(options); 
    }); 
}, 
+0

如果你可以创建所有的html,我最好把它附加一次,而不是每次迭代附加它,就像OP正在做的那样。 – DontVoteMeDown

+0

取决于项目的数量。追加更容易阅读 – mplungjan

+0

当然我同意,但如果你有2个项目,它会导致6'append()'和6'text()',而不是一个'html()'。 – DontVoteMeDown