Javascript / jQuery: Çoklu Seçimde Değerleri (Seçim) Ayarlayın


100

Çoklu seçimim var:

<select name='strings' id="strings" multiple style="width:100px;">
    <option value="Test">Test</option>
    <option value="Prof">Prof</option>
    <option value="Live">Live</option>
    <option value="Off">Off</option>
    <option value="On">On</option>
</select>

Veritabanımdan veri yüklüyorum. Sonra şöyle bir dizem var:

var values="Test,Prof,Off";

Çoklu seçimde bu Değerleri nasıl ayarlayabilirim? Zaten bir dizideki dizeyi değiştirmeyi denedim ve onu katsayıya değer olarak koymayı denedim ama çalışmıyor ... Birisi bana bu konuda yardım edebilir mi? TEŞEKKÜRLER!!!

Yanıtlar:


133

Öznitelik seçiciyi kullanan dinamik bir seçicideki değeri kullanarak döngü boyunca yineleyin.

var values="Test,Prof,Off";
$.each(values.split(","), function(i,e){
    $("#strings option[value='" + e + "']").prop("selected", true);
});

Çalışma Örneği http://jsfiddle.net/McddQ/1/


1
Harika, ama seçili değerlerin id = string ile "çoklu seçim" içinde seçilmesi gerektiğini nasıl söylersiniz?
Zwen2012

@ user1824136 Mükemmel, Bu sabah birine yardım edebildiğime sevindim!
Kevin Bowersox

1
Yine de jQuery'ye güveneceksek, daha çok ŁukaszW.pl'yi tercih edin $('#strings').val(values.split(',')). JQuery olmadan, ŁukaszW.pl'nin Plain Old Javascript'i document.getElementById('strings').value = ["Test", "Prof", "Off"]de tek
satırlık bir başarıya ulaşır

109

jQuery'de:

$("#strings").val(["Test", "Prof", "Off"]);

veya saf JavaScript'te:

var element = document.getElementById('strings');
var values = ["Test", "Prof", "Off"];
for (var i = 0; i < element.options.length; i++) {
    element.options[i].selected = values.indexOf(element.options[i].value) >= 0;
}

jQuery burada önemli bir soyutlama yapıyor.


1
Bu benim için mükemmel çalıştı ve 'seçtiğim' seçimlerim ... tüm değerleri bir kerede eklemeliyim (aynen yukarıda söylediğin gibi)
Todd Vance

4
Hmm, saf javascript benim için Chrome / mac veya FF / mac üzerinde çalışmıyor. Gerçekte neyin seçildiğini, en azından tarayıcıda görsel olarak seçilmiş olanı etkilemez.
Bill Keese

3
Dize geçtiğimde çalışıyor, ama diziyi geçirdiğimde değil.
Ravi G

Aynı sorunu yaşamak; bu yalnızca dize değerleriyle çalışır, dizilerle değil (jQuery değil, düz JS kullanarak).
jayp

1
Bununla ilgili sorunlar yaşayanlar için, JavaScript'te değeri ayarladıktan sonra bir 'değişiklik' olayını tetiklediğinizden emin olmalısınız. JQuery kullanıldığında bu $ ("# dizeler"). Val (["Test", "Prof", "Kapalı"]). Trigger ('değiştir');
Jon Wyatt

20

JQuery val işlevine bir dizi değer sağlamanız yeterlidir:

var values = "Test,Prof,Off";
$('#strings').val(values.split(','));

Ve seçilen değerleri aynı formatta almak için:

values = $('#strings').val();

8

Saf JavaScript ES6 çözümü

  • Her seçeneği bir querySelectorAllişlevle yakalayın vevalues dizeyi .
  • Array#forEachİçindeki her öğeyi yinelemek için kullanın .values .
  • Kullanım Array#find seçeneği eşleştirme verilen değeri bulmak için.
  • selectedÖzniteliğini olarak ayarlayın true.

Not : Array#fromBir dönüştüren dizi benzeri bir diziye nesne ve ardından kullanmak mümkün Array.prototypegibi, üzerinde işlevlerini find veya harita .

var values = "Test,Prof,Off",
    options = Array.from(document.querySelectorAll('#strings option'));

values.split(',').forEach(function(v) {
  options.find(c => c.value == v).selected = true;
});
<select name='strings' id="strings" multiple style="width:100px;">
    <option value="Test">Test</option>
    <option value="Prof">Prof</option>
    <option value="Live">Live</option>
    <option value="Off">Off</option>
    <option value="On">On</option>
</select>


2

Temel olarak bir yapın values.split(',')ve ardından ortaya çıkan dizi boyunca döngü yapın ve Seç'i ayarlayın.


1

Saf JavaScript ES5 çözümü

Nedense jQuery veya ES6 kullanmıyorsunuz? Bu size yardımcı olabilir:

var values = "Test,Prof,Off";
var splitValues = values.split(',');
var multi = document.getElementById('strings');

multi.value = null; // Reset pre-selected options (just in case)
var multiLen = multi.options.length;
for (var i = 0; i < multiLen; i++) {
  if (splitValues.indexOf(multi.options[i].value) >= 0) {
    multi.options[i].selected = true;
  }
}
<select name='strings' id="strings" multiple style="width:100px;">
    <option value="Test">Test</option>
    <option value="Prof">Prof</option>
    <option value="Live">Live</option>
    <option value="Off">Off</option>
    <option value="On" selected>On</option>
</select>


0
var groups = ["Test", "Prof","Off"];

    $('#fruits option').filter(function() {
      return groups.indexOf($(this).text()) > -1; //Options text exists in array
    }).prop('selected', true); //Set selected

0

bu, değiştirme için bazı yanıtlarda bir hatadır |

var mystring = "this|is|a|test";
mystring = mystring.replace(/|/g, "");
alert(mystring);

bu düzeltme doğru ama | Sonunda şöyle görünmeli \ |

var mystring = "this|is|a|test";
mystring = mystring.replace(/\|/g, "");
alert(mystring);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.