2015-04-23 92 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