Javascript / jQuery: ตั้งค่า (การเลือก) ในการเลือกหลายรายการ


100

ฉันมีหลายตัวเลือก:

<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>

ฉันโหลดข้อมูลจากฐานข้อมูลของฉัน จากนั้นฉันมีสตริงดังนี้:

var values="Test,Prof,Off";

ฉันจะตั้งค่านี้ในการเลือกหลายรายการได้อย่างไร ลองเปลี่ยนสตริงในอาร์เรย์แล้วและใส่เป็นค่าในหลายค่า แต่ไม่ได้ผล ... ! ใครสามารถช่วยฉันด้วยเรื่องนี้? ขอบคุณ !!!

คำตอบ:


133

วนซ้ำโดยใช้ค่าในตัวเลือกแบบไดนามิกที่ใช้ตัวเลือกแอตทริบิวต์

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

ตัวอย่างการทำงาน http://jsfiddle.net/McddQ/1/


1
เจ๋งมาก แต่คุณจะบอกได้อย่างไรว่าควรเลือก vlaues ที่เลือกไว้ใน "multiple select" ด้วย id = string
Zwen2012

@ user1824136 ยอดเยี่ยมดีใจที่ได้ช่วยคนเมื่อเช้านี้!
Kevin Bowersox

1
ถ้าเราจะขึ้นอยู่กับ jQuery ต่อไปชอบŁukaszW.pl $('#strings').val(values.split(','))มาก หากไม่มี jQuery Javascript แบบธรรมดาของŁukaszW.pl document.getElementById('strings').value = ["Test", "Prof", "Off"]ก็สามารถทำได้ในซับ
KyleMit

109

ใน jQuery:

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

หรือใน JavaScript บริสุทธิ์:

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 ทำนามธรรมที่สำคัญที่นี่


1
สิ่งนี้ใช้ได้ผลสมบูรณ์แบบสำหรับฉันและการเลือก 'ที่เลือก' ของฉัน ... ต้องเพิ่มค่าทั้งหมดในครั้งเดียว (เช่นเดียวกับที่คุณพูดข้างต้น)
ทอดด์แวนซ์

4
อืมจาวาสคริปต์แท้ใช้ไม่ได้สำหรับฉันใน Chrome / mac หรือ FF / mac ไม่มีผลกระทบต่อสิ่งที่เลือกจริงอย่างน้อยสิ่งที่ปรากฏที่เลือกด้วยสายตาในเบราว์เซอร์
Bill Keese

3
มันใช้งานได้เมื่อฉันส่งผ่านสตริง แต่ไม่ใช่เมื่อฉันส่งอาร์เรย์
Ravi G

มีปัญหาเดียวกัน ใช้งานได้กับค่าสตริงเท่านั้นไม่ใช่อาร์เรย์ (ใช้ JS ธรรมดาไม่ใช่ jQuery)
jayp

1
สำหรับผู้ที่ประสบปัญหานี้คุณควรตรวจสอบให้แน่ใจว่าคุณได้ทริกเกอร์เหตุการณ์ "เปลี่ยนแปลง" หลังจากตั้งค่าใน JavaScript การใช้ jQuery นี้จะเป็น $ ("# strings"). val (["Test", "Prof", "Off"]). trigger ('change');
Jon Wyatt

20

เพียงแค่ระบุฟังก์ชัน jQuery val ด้วยอาร์เรย์ของค่า:

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

และเพื่อให้ได้ค่าที่เลือกในรูปแบบเดียวกัน:

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

8

โซลูชัน Pure JavaScript ES6

  • จับทุกตัวเลือกด้วยquerySelectorAllฟังก์ชันและแยกvaluesสตริง
  • ใช้Array#forEachเพื่อวนซ้ำทุกองค์ประกอบจากvaluesอาร์เรย์
  • ใช้Array#findเพื่อค้นหาตัวเลือกที่ตรงกับค่าที่กำหนด
  • ตั้งค่าของแอตทริบิวต์selectedtrue

หมายเหตุ : Array#fromแปลงอาร์เรย์เหมือนวัตถุเป็นอาร์เรย์และจากนั้นคุณสามารถที่จะใช้Array.prototypeฟังก์ชั่นที่มันเหมือนการค้นหาหรือแผนที่

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>



1

โซลูชัน Pure JavaScript ES5

ด้วยเหตุผลบางประการคุณไม่ใช้ jQuery หรือ ES6? สิ่งนี้อาจช่วยคุณได้:

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 mystring = "this|is|a|test";
mystring = mystring.replace(/|/g, "");
alert(mystring);

การแก้ไขนี้ถูกต้อง แต่ | ในที่สุดก็ควรมีลักษณะเช่นนี้ \ |

var mystring = "this|is|a|test";
mystring = mystring.replace(/\|/g, "");
alert(mystring);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.