ฉันจะตั้งค่าของ DropDownList โดยใช้ jQuery ได้อย่างไร


คำตอบ:


602
$("#mydropdownlist").val("thevalue");

เพียงตรวจสอบให้แน่ใจว่าค่าในแท็กตัวเลือกตรงกับค่าในเมธอด val


ฉันมีตัวตรวจสอบช่วงกับรายการแบบหล่นลงและฉันกำลังตั้งค่าของรายการแบบหล่นลงตามที่คุณได้อธิบายไว้ข้างต้น แต่ตัวตรวจสอบช่วงนั้นไม่สามารถบอกให้ฉันเลือกค่าได้ (เมื่อค่าที่เลือกอยู่ในช่วง) โปรดดูคำถามของฉันstackoverflow.com/questions/3165033/…
James

21
สิ่งนี้จะไม่ดำเนินการเหตุการณ์ "เปลี่ยน"
AGamePlayer

4
ต้องการย้ำอีกครั้ง - ตรวจสอบให้แน่ใจว่าคุณมีชุดแอตทริบิวต์ "ค่า" มิฉะนั้นวิธีนี้จะไม่ทำงาน (ฉันช่วยคนที่แสดงเรื่องนี้และสงสัยว่าทำไมมันไม่เลือกผ่านข้อความในรายการดรอปดาวน์) ต้องการให้แน่ใจว่าชัดเจน
JasCav

1
1 มีการเรียก$("#mycontrolId").selectmenu('refresh');เพื่อสะท้อนการเปลี่ยนแปลง
VladL

ข้อมูลรายละเอียดได้ที่ลิงค์นี้htmlgoodies.com/beyond/javascript/…
Niamath

52

หากคุณทำงานกับดัชนีคุณสามารถตั้งค่าดัชนีที่เลือกโดยตรงด้วย .attr ():

$("#mydropdownlist").attr('selectedIndex', 0);

สิ่งนี้จะตั้งเป็นค่าแรกใน droplist

แก้ไข: วิธีที่ฉันใช้ในการทำงาน แต่ดูเหมือนว่าจะไม่ได้อีกต่อไป

แต่ฮันชี้ให้เห็นอย่างเป็นสุขในความคิดเห็นวิธีที่ถูกต้องคือ:

$("#mydropdownlist").get(0).selectedIndex = index_here;

7
ตอนนี้ไม่ได้ทำงานเลยเพราะแท็กไม่ได้มีแอตทริบิวต์ใดชื่อselect selectedIndexมันเป็นคุณสมบัติของวัตถุ DOM แทน ดังนั้นรหัสควรเป็น:$("#mydropdownlist").get(0).selectedIndex = index_here;
ฮัน

5
$("#mydropdownlist").prop('selectedIndex', index_here); ยังใช้งานได้
จำนวน

("#mydropdownlist"). รับ (0) .selectedIndex = index_here; วิธีนี้ได้ผล !! @
kasim

วิธีที่ยอดเยี่ยมในการเปลี่ยนการเลือกในเมนูแบบเลื่อนลงขอขอบคุณ
Avtandil Kavrelishvili

ฉันจะรู้สึกถึงความก้าวร้าวแบบแฝงในคำตอบหรือไม่
เดชา

49

ตามที่แนะนำโดย @Nick Berardi หากค่าที่เปลี่ยนแปลงของคุณไม่ปรากฏที่ส่วนหน้าของ UI ให้ลอง:

$("#mydropdownlist").val("thevalue").change();

1
ขอบคุณมากเพียงหนึ่งบรรทัดเรียบร้อยและเป็นประโยชน์ในการเพิ่มการเปลี่ยนแปลง () เหตุการณ์ของ SelectBox โดยใช้แบบฟอร์ม jQuery และ Laravel
WhySoSerious

นี่เป็นคำตอบเดียวที่การเปลี่ยนแปลงจริงแสดงในดรอปดาวน์ selectmenuไม่ได้กำหนดไว้ใน jQuery รุ่นของฉัน แต่change()ใช้เคล็ดลับ
ชาด Hedgcock

ขอบคุณ นี่เป็นวิธีเดียวที่ได้ผลสำหรับฉัน (หลังจากลองทุกอย่างเหนือกว่านี้)
แรงบันดาลใจ

20

ลองวิธีง่ายๆนี้:

/*make sure that value is included in the options value of the dropdownlist 
e.g. 
(<select><option value='CA'>California</option><option value='AK'>Alaska</option>      </select>)
*/

$('#mycontrolId').val(myvalue).attr("selected", "selected");

2
อย่าลืมที่จะโทร$("#mycontrolId").selectmenu('refresh');
VladL

@VladL คุณหมายถึง$('#mycontrolId').selectmenu('refresh').val(myvalue).attr("selected", "selected");อะไร
Dylan Czenski

9

หากดรอปดาวน์ของคุณคือ Asp.Net ดรอปดาวน์โค้ดด้านล่างจะทำงานได้ดี

 $("#<%=DropDownName.ClientID%>")[0].selectedIndex=0;

แต่ถ้า DropDown ของคุณคือ HTML ให้เลื่อนลงรหัสนี้จะใช้งานได้

 $("#DropDownName")[0].selectedIndex=0;

5

คำตอบที่ดีที่สุดสำหรับคำถาม:

$("#comboboxid").val(yourvalue).trigger("chosen:updated");

เช่น:

$("#CityID").val(20).trigger("chosen:updated");

หรือ

$("#CityID").val("chicago").trigger("chosen:updated");


2

มีหลายวิธีที่จะทำ นี่คือบางส่วนของพวกเขา:

$("._statusDDL").val('2');

หรือ

$('select').prop('selectedIndex', 3);

1
โปรไฟล์ของคุณระบุว่าคุณเชื่อมโยงกับลิงค์ที่คุณรวมไว้ที่นี่ การลิงก์ไปยังสิ่งที่คุณเป็นพันธมิตร (เช่นผลิตภัณฑ์หรือเว็บไซต์) โดยไม่เปิดเผยว่าการเป็นพันธมิตรในโพสต์ของคุณนั้นถือเป็นสแปมใน Stack Exchange / Stack Overflow ดู: การส่งเสริมตัวเองของ "ดี" หมายถึงอะไร? , เคล็ดลับและคำแนะนำเกี่ยวกับการส่งเสริมตนเอง , ความหมายที่แท้จริงของ "สแปม" สำหรับกองมากเกินคืออะไร? และสิ่งที่ทำให้บางสิ่งบางอย่างสแปม
Makyen

1

ฉันคิดว่านี่อาจช่วย:

    $.getJSON('<%= Url.Action("GetDepartment") %>', 
              { coDepartment: paramDepartment },
              function(data) {
                    $(".autoCompleteDepartment").empty();
                    $(".autoCompleteDepartment").append($("<option />").val(-1));
                    $.each(data, function() {
                        $(".autoCompleteDepartment").append($("<option />").val(this.CodDepartment).text(this.DepartmentName));
                    });
                    $(".autoCompleteDepartment").val(-1);                                       
              }  
             );

หากคุณทำเช่นนี้คุณจะเพิ่มองค์ประกอบที่ไม่มีข้อความ ดังนั้นเมื่อคุณคลิกเดอคอมโบก็ไม่ได้ apear แต่ค่า -1 คุณเพิ่มเลือกในภายหลังด้วย $ (". autoCompleteDepartment"). val (-1); ให้คุณควบคุมว่าคอมโบนั้นมีค่าที่ถูกต้องหรือไม่

หวังว่ามันจะช่วยให้ทุกคน

ขอโทษสำหรับภาษาอังกฤษของฉัน


1

หากคุณเพียงแค่ต้องกำหนดค่าของแบบเลื่อนลงวิธีที่ดีที่สุดคือ

$("#ID").val("2");

หากคุณต้องเรียกสคริปต์ใด ๆ หลังจากอัปเดตค่าดรอปดาวน์เช่นถ้าคุณตั้งค่าเหตุการณ์ onChange ใด ๆ ในดรอปดาวน์และคุณต้องการเรียกใช้งานนี้หลังจากอัปเดตดร็อปดาวน์กว่าที่คุณต้องการใช้เช่นนี้

$("#ID").val("2").change();

0

นี่คือฟังก์ชั่นที่สร้างขึ้นเพื่อตั้งค่าตัวเลือกที่เลือกอย่างรวดเร็ว:

function SetSelected(elem, val){
        $('#'+elem+' option').each(function(i,d){
        //  console.log('searching match for '+ elem + '  ' + d.value + ' equal to '+ val);
            if($.trim(d.value).toLowerCase() == $.trim(val).toLowerCase()){
        //      console.log('found match for '+ elem + '  ' + d.value);
                $('#'+elem).prop('selectedIndex', i);
            }
        });
    }

เรียกใช้ฟังก์ชันนี้ด้วยรหัสองค์ประกอบอาร์กิวเมนต์และค่าที่เลือก แบบนี้:

SetSelected('selectID','some option');

มันจะมีประโยชน์เมื่อมีตัวเลือกมากมายให้เลือก


0

ในกรณีที่คุณโหลดทั้งหมด<options ....></options>ด้วยการโทร Ajax
ทำตามขั้นตอนเหล่านี้เพื่อทำสิ่งนี้

1) สร้างวิธีแยกต่างหากสำหรับการตั้งค่าแบบเลื่อนลง
สำหรับ Ex:

function set_ip_base_country(countryCode)
    $('#country').val(countryCode)
} 

2) เรียกวิธีนี้เมื่อ ajax call ประสบความสำเร็จ html ทั้งหมดจะต้องต่อท้ายงานให้เสร็จ

สำหรับอดีต:

success: function (doc) {
  .....
  .....
  $("#country").append('<option style="color:black;" value="' + key + '">'  +   value + '</option>')
  set_ip_base_country(ip_base_country)
}

0

กำหนดdrop-down selectedค่าและอัพเดทการเปลี่ยนแปลง

$("#PR2DistrictId option[value='@Model.PR2DistrictId']").attr("selected", true).trigger("chosen:updated")

ที่นี่เราแรกตั้งค่าจากModelและกว่าการปรับปรุงมันในเลือก


0

// รูปแบบ Html ของรายการแบบเลื่อนลง

<select id="MyDropDownList">
<option value=test1 selected>test1</option>
<option value=test2>test2</option>
<option value=test3>test3</option>
<option value=test4>test4</option>

// หากคุณต้องการเปลี่ยนรายการที่เลือกเป็น test2 โดยใช้ javascript ลองอันนี้. // ตั้งค่าตัวเลือกถัดไปที่คุณต้องการเลือก

var NewOprionValue = "Test2"

        var RemoveSelected = $("#MyDropDownList")[0].innerHTML.replace('selected', '');
        var ChangeSelected = RemoveSelected.replace(NewOption, NewOption + 'selected>');
        $('#MyDropDownList').html(ChangeSelected);

0

การใช้คำตอบที่ไฮไลต์ / ตรวจสอบด้านบนนั้นเหมาะกับฉัน ... ฉันโกงการรับ URL เล็กน้อย แต่โดยทั่วไปฉันกำหนด URL ใน Javascript แล้วตั้งค่าผ่านคำตอบ jquery จากด้านบน:

<select id="select" onChange="window.location.href=this.value">
    <option value="">Select a task </option>
    <option value="http://127.0.0.1:5000/choose_form/1">Task 1</option>
    <option value="http://127.0.0.1:5000/choose_form/2">Task 2</option>
    <option value="http://127.0.0.1:5000/choose_form/3">Task 3</option>
    <option value="http://127.0.0.1:5000/choose_form/4">Task 4</option>
    <option value="http://127.0.0.1:5000/choose_form/5">Task 5</option>
    <option value="http://127.0.0.1:5000/choose_form/6">Task 6</option>
    <option value="http://127.0.0.1:5000/choose_form/7">Task 7</option>
    <option value="http://127.0.0.1:5000/choose_form/8">Task 8</option>
</select>
<script>
    var pathArray = window.location.pathname.split( '/' );
    var selectedItem = "http://127.0.0.1:5000/" + pathArray[1] + "/" + pathArray[2];
    var trimmedItem = selectedItem.trim();
    $("#select").val(trimmedItem);
</script>

0

สำหรับผู้ที่ใช้ Bootstrap ให้ใช้$(#elementId').selectpicker('val','elementValue')แทน$('#elementId').val('elementValue')เนื่องจากหลังไม่ได้อัปเดตค่าใน UI

หมายเหตุ : แม้.change()ฟังก์ชั่นใช้งานได้ตามคำแนะนำข้างต้นในบางคำตอบ แต่มันจะเรียกใช้$('#elementId').change(function(){ //do something })ฟังก์ชัน

เพียงโพสต์สิ่งนี้ออกเพื่อให้ผู้อ้างอิงหัวข้อนี้ในอนาคต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.