วิธีตั้งค่าตัวเลือกแรกบนกล่องเลือกโดยใช้ jQuery


135

ฉันมี HTML สองselectกล่อง ฉันต้องการรีเซ็ตหนึ่งselectกล่องเมื่อฉันทำการเลือกในอีกกล่องหนึ่ง

<select id="name" >
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name2" >
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

เมื่อฉันเลือกตัวเลือกแรกselect(เช่นid="name") ฉันต้องรีเซ็ตตัวที่สองselectเป็นselect all; ในทำนองเดียวกันเมื่อผมเลือกตัวเลือกของที่สองselect(คือid="name2") ผมต้องรีเซ็ตแรกไปselectselect all

ฉันจะทำเช่นนั้นได้อย่างไร?


ฉันเปลี่ยนชื่อเรื่องจาก[... ] รีเซ็ต [... ]เป็น[... ] ตั้งค่าตัวเลือกแรกใน [... ]เนื่องจากการรีเซ็ตหมายถึงการตั้งค่าเริ่มต้นที่โหลดในตอนแรก
Pierre de LESPINAY

คำตอบ:


277

สิ่งนี้ควรทำเคล็ดลับ: https://jsfiddle.net/TmJCE/898/

$('#name2').change(function(){
    $('#name').prop('selectedIndex',0);
});


$('#name').change(function(){
    $('#name2').prop('selectedIndex',0);
});

15
จริง แต่มันยังคงแสดงแนวคิดพื้นฐานและในกรณีนี้ดูเหมือนว่าเขาต้องการรีเซ็ตเป็น "เลือกทั้งหมด" ซึ่งเป็นตัวเลือกแรก
แจ็ค

2
ถ้าคุณใช้นี้จากองค์ประกอบให้แน่ใจว่าจะไม่ได้ตั้งค่า<button> type="reset"มันไม่ได้ผลสำหรับฉันจนกว่าฉันจะตั้งประเภทเป็นbutton
Caumons

3
ฉันเลือกองค์ประกอบแรกของเมนูแบบเลื่อนลง แต่ข้อความยังคงเป็นแบบเก่า
VaTo

ฉันใช้สิ่งนี้เป็นส่วนที่เหลือของช่องเลือกอยู่หรือไม่? หรือฉันเข้าใจไม่ถูก
ankit suthar

1
@ankitsuthar มันจะเปลี่ยนตัวเลือกที่เลือกselectเป็นค่าที่ระบุ select.prop('selectedIndex', 0)จะรีเซ็ตเป็นตัวเลือกแรกselect.prop('selectedIndex', 1)จะตั้งเป็นตัวเลือกที่สอง
Jack

44

หากคุณต้องการรีเซ็ตองค์ประกอบที่เลือกเป็นตำแหน่งแรกวิธีที่ง่ายที่สุดอาจเป็น:

$('#name2').val('');

ในการรีเซ็ตองค์ประกอบที่เลือกทั้งหมดในเอกสาร:

$('select').val('')

แก้ไข: เพื่อชี้แจงตามความคิดเห็นด้านล่างการดำเนินการนี้จะรีเซ็ตองค์ประกอบที่เลือกเป็นรายการว่างแรกและเฉพาะเมื่อมีรายการว่างอยู่ในรายการ


ใช่สิ่งนี้จะใช้ได้เกือบตลอดเวลา วิธีแก้ปัญหาอื่น ๆ บางครั้งอาจมีปัญหา วิธีที่ง่ายที่สุดแน่นอน
Sworup Shakya

5
แค่คำเตือน: สิ่งนี้จะใช้ได้ก็ต่อเมื่อคุณต้องการให้ตัวเลือกแรกถูกเลือกและตัวเลือกแรกมีชุดค่าว่าง หากตัวเลือกแรกของคุณมีค่าอื่นหรือหากไม่มีตัวเลือกใดในช่อง SELECT ที่มีค่าว่างการดำเนินการนี้จะไม่มีผลต่อการเปลี่ยนแปลงใด ๆ หรือถ้าตัวเลือกอื่นมีค่าว่างก็จะเลือกตัวเลือกนั้นแทน
HBlackorby

@HBlackorby ความคิดเห็นของคุณมีประโยชน์ แต่ 1) ตัวเลือกที่มีvalue=""สามารถปรากฏในลำดับใดก็ได้ 2) ตัวเลือกที่ไม่มีแอตทริบิวต์ค่าเช่น<option></option>จะไม่เหมือนกับตัวเลือกที่มีแอตทริบิวต์ค่าสตริงว่างเช่น<option value=""></option>และคุณระบุชัดเจนว่าเราต้องการvalue="" ส่วนที่ 3) แม้ว่าจะไม่มี<option>ค่าสตริงว่างก็ตาม การตั้งค่า.val('')จะ "มีผลต่อการเปลี่ยนแปลง" สิ่งที่เลือกจะปรากฏเพื่อเปลี่ยนเป็นว่างเปล่าใช่หรือไม่? อย่างน้อยก็ใน Chrome ของฉัน ...
The Red Pea

22

ตามที่ @PierredeLESPINAY ชี้ให้เห็นในความคิดเห็นวิธีแก้ปัญหาเดิมของฉันไม่ถูกต้อง - มันจะรีเซ็ตรายการแบบเลื่อนลงเป็นตัวเลือกที่อยู่บนสุด แต่เนื่องจากundefinedค่าที่ส่งคืนได้รับการแก้ไขเป็นดัชนี 0 เท่านั้น

นี่เป็นวิธีแก้ไขที่ถูกต้องซึ่งคำนึงถึงselectedคุณสมบัติ:

$('#name').change(function(){
    $('#name2').val(function () {
        return $(this).find('option').filter(function () {
            return $(this).prop('defaultSelected');
        }).val();
    });
});

สาธิต : http://jsfiddle.net/weg82/257/


คำตอบเดิม - ไม่ถูกต้อง

ใน jQuery 1.6+ คุณต้องใช้.propเมธอดเพื่อรับการเลือกเริ่มต้น:

// Resets the name2 dropdown to its default value
$('#name2').val( $('#name2').prop('defaultSelected') );

หากต้องการรีเซ็ตแบบไดนามิกเมื่อรายการแบบเลื่อนลงรายการแรกเปลี่ยนแปลงให้ใช้.changeเหตุการณ์:

$('#name').change(function(){
  $('#name2').val( $('#name2').prop('defaultSelected') );
});

สิ่งที่ Jens Roland พูดพร้อมกับการสนับสนุนของฝ่ายสนับสนุน ^^ jsfiddle.net/weg82/2
zynaps

แต่ในทางกลับกันการสนับสนุนไม่สมเหตุสมผลนั่นเทียบเท่ากับรายการแบบเลื่อนลงขนาดใหญ่หนึ่งรายการ ฉันไม่เข้าใจ
Jens Roland

แค่เขียน$('#name2').val( $(this).prop('defaultSelected') );
vsync

@vsync: $(this)หมายถึง$('#name')ไม่ได้$('#name2')จึงไม่มี
Jens Roland

1
defaultSelectedเป็น<option>ทรัพย์สินจะกลับมาundefinedในวันที่<select>
Pierre de LESPINAY

7

ใช้สิ่งนี้หากคุณต้องการรีเซ็ตการเลือกเป็นตัวเลือกที่มีแอตทริบิวต์ "ที่เลือก" ทำงานคล้ายกับฟังก์ชัน form.reset () inbuilt javascript เพื่อเลือก

 $("#name").val($("#name option[selected]").val());


4

นี่คือวิธีที่ฉันทำให้มันใช้งานได้หากคุณต้องการให้มันกลับไปที่ตัวเลือกแรกของคุณเช่น "เลือกตัวเลือก" "Select_id_wrap" เห็นได้ชัดว่าเป็น div ที่อยู่รอบ ๆ การเลือก แต่ฉันแค่ต้องการทำให้ชัดเจนในกรณีที่มี มีผลต่อวิธีการทำงานนี้ ทุ่นระเบิดรีเซ็ตเป็นฟังก์ชั่นคลิก แต่ฉันแน่ใจว่ามันจะทำงานในการเปลี่ยนแปลงได้เช่นกัน ...

$("#select_id_wrap").find("select option").prop("selected", false);

3

ใช้รหัสด้านล่าง ดูการทำงานที่นี่http://jsfiddle.net/usmanhalalit/3HPz4/

 $(function(){
     $('#name').change(function(){
         $('#name2 option[value=""]').attr('selected','selected');
     });

     $('#name2').change(function(){
         $('#name option[value=""]').attr('selected','selected');
     });
 });

อีกครั้ง - ใช้งานได้เฉพาะเมื่อค่าเริ่มต้นได้รับการแก้ไขเป็นค่าเริ่มต้น / ว่างเปล่าเท่านั้น
Jens Roland

3

นี้ยังสามารถใช้

$('#name2').change(function(){
    $('#name').val('');//You can set the first value of first one if that is not empty
});


$('#name').change(function(){
    $('#name2').val('');
});

3

นี่เป็นวิธีที่ยืดหยุ่น / ใช้ซ้ำได้มากที่สุดในการรีเซ็ตกล่องเลือกทั้งหมดในแบบฟอร์มของคุณ

      var $form = $('form') // Replace with your form selector
      $('select', $form).each(function() {
        $(this).val($(this).prop('defaultSelected'));
      });

1

ต่อไปนี้เป็นวิธีจัดการกับองค์ประกอบตัวเลือกแบบสุ่มที่กำหนดเป็นค่าเริ่มต้น (ในกรณีนี้ข้อความ 2 คือค่าเริ่มต้น):

<select id="name2" >
   <option value="">select all</option>
   <option value="1">Text 1</option>
   <option value="2" selected="selected">Text 2</option>
   <option value="3">Text 3</option>
</select>
<script>
    $('#name2 option[selected]').prop('selected', true);
</script>

0

คุณสามารถลองสิ่งนี้:

$( 'select' ).each( function () {
    if ( $( this ).children().length > 0 ) {
        $( $( this ).children()[0] ).attr( 'selected', 'selected' );
        $( this ).change();
    }
} );

0

ฉันมีปัญหาในการใช้คุณสมบัติ defaultSelected ในคำตอบโดย @Jens Roland ใน jQuery v1.9.1 วิธีทั่วไปมากขึ้น (ด้วยการเลือกที่ขึ้นอยู่กับจำนวนมาก) คือการใส่แอตทริบิวต์ข้อมูลเริ่มต้นในการเลือกที่ขึ้นอยู่กับของคุณจากนั้นจึงวนซ้ำเมื่อตั้งค่าใหม่

<select id="name0" >
    <option value="">reset</option>
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name1" class="name" data-default="1">
    <option value="">select all</option>
    <option value="1" selected="true">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

<select id="name2" class="name" data-default="2">
    <option value="">select all</option>
    <option value="1">Text 1</option>
    <option value="2" selected="true">Text 2</option>
    <option value="3">Text 3</option>
</select>

และจาวาสคริปต์ ...

$('#name0').change(function(){
    if($('#name0').val() == '') {
        $('select.name').each(function(index){
          $(this).val($(this).data('default'))  
        })
    } else {
      $('select.name').val($('#name0').val() );
    }
});

ดูhttp://jsfiddle.net/8hvqN/สำหรับเวอร์ชันที่ใช้งานได้ข้างต้น


0

ฉันสร้างตัวเลือกใหม่ในแท็กเลือกที่มีค่าสตริงว่าง ("") และใช้:

$("form.query").find('select#topic').val("");

0

ใช้ jquery เพื่อผูกเหตุการณ์ onchange เพื่อเลือก แต่คุณไม่จำเป็นต้องสร้าง$(this)วัตถุ jquery อื่น

$('select[name=name2]').change(function(){
    if (this.value) {
        console.log('option value = ', this.value);
        console.log('option text  = ', this.options[this.selectedIndex].text);

        // Reset selected
        this.selectedIndex = this.defaultSelected;
    }
});

0

ใช้รหัสนี้เพื่อรีเซ็ตฟิลด์การเลือกทั้งหมดเป็นตัวเลือกเริ่มต้นซึ่งมีการกำหนดแอตทริบิวต์ที่เลือกไว้

<select id="name1" >
    <option value="1">Text 1</option>
    <option value="2" selected="selected" >Default Text 2</option>
    <option value="3">Text 3</option>
</select>
<select id="name2" >
    <option value="1">Text 1</option>
    <option value="2">Text 2</option>
    <option value="3" selected="selected" >Default Text 3</option>
</select>
<script>
    $('select').each( function() {
        $(this).val( $(this).find("option[selected]").val() );
    });
</script>

0

นี่คือทางออกที่ดีที่สุดที่ฉันใช้ สิ่งนี้จะใช้สำหรับมากกว่า 1 slectbox

$("select").change(function(){
    var thisval = $(this).val();
    $("select").prop('selectedIndex',0);
    $(this).val(thisval);
})


0

การตั้งค่าตัวเลือก 1 ในองค์ประกอบเลือกสามารถทำได้โดยส่วนนี้ หากต้องการแสดงให้เห็นภาพคุณมี tp add .trigger ('change') ต่อท้าย

$('#name').removeAttr('selected').find('option:first').attr('selected', 'selected').trigger("change");
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.