ตรวจสอบว่ามีการเลือกตัวเลือกด้วย jQuery หรือไม่หากไม่ได้เลือกค่าเริ่มต้น


207

การใช้ jQuery คุณจะตรวจสอบได้อย่างไรว่ามีตัวเลือกในเมนูที่เลือกหรือไม่ถ้าไม่ให้กำหนดหนึ่งในตัวเลือกที่เลือก

(ตัวเลือกถูกสร้างขึ้นด้วยฟังก์ชั่นของเขาวงกต PHP ในแอพที่ฉันเพิ่งได้รับดังนั้นนี่คือการแก้ไขอย่างรวดเร็วในขณะที่ฉันเดินไปรอบ ๆ พวกมัน :)


คำตอบ:


270

ในขณะที่ฉันไม่แน่ใจเกี่ยวกับสิ่งที่คุณต้องการให้สำเร็จรหัสนี้ใช้งานได้สำหรับฉัน

<select id="mySelect" multiple="multiple">
  <option value="1">First</option>
  <option value="2">Second</option>
  <option value="3">Third</option>
  <option value="4">Fourth</option>
</select>

<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length) {
    $("#mySelect option[value='3']").attr('selected', 'selected');
  }
});
</script>

86
การเลือกจะง่ายต่อการอ่านเช่นนี้:$("#mySelect").val(3);
Jørn Schou-Rode

6
สิ่งนี้ทำให้ฉันอยู่ในเส้นทางที่ถูกต้อง แต่ฉันต้องทำสิ่งนี้: $("#mySelect option")[2]['selected'] = true; คิดออกหลังจากตรวจสอบโครงสร้างวัตถุใน Firebug
semperos

28
ตั้งแต่ jQuery 1.6 คุณสามารถตั้งค่าคุณสมบัติได้โดยตรง $("#mySelect").prop("selectedIndex", 2)
gradbot

1
รุ่น. val (x) ใช้งานไม่ได้ใน Internet Explorer 8 ดังนั้น @gradbot จึงใช้ได้ถูกต้องเนื่องจากสามารถใช้ได้กับทุกเบราว์เซอร์
Sorcy

30

ไม่จำเป็นต้องใช้ jQuery สำหรับสิ่งนี้:

var foo = document.getElementById('yourSelect');
if (foo)
{
   if (foo.selectedIndex != null)
   {
       foo.selectedIndex = 0;
   } 
}

58
OP ระบุว่า "ใช้ jQuery ... " ดังนั้นจึงไม่จำเป็นที่จะเพิกเฉยใช่ไหม?
BryanH

13
โดยส่วนตัวถ้าฉันถามคำถามเฉพาะฉันอยากได้คำตอบสำหรับคำถามแทนที่จะเป็นวิธีอื่น
vitto

18
บางครั้งคำตอบที่คุณแสวงหาไม่ใช่คำตอบที่คุณคาดหวัง
MrBoJangles

5
ไม่ว่าเขาจะถาม jQuery หรือไม่และคำตอบ jQuery นั้นค่อนข้างเข้าใจง่ายโดยเฉพาะอย่างยิ่งหากไม่เข้าใจ JavaScript พื้นฐาน
shmeeps

6
วิธีที่ยอดเยี่ยมในการทำบางครั้งจาวาสคริปต์พื้นฐานอาจมีประโยชน์มาก!
Hallaghan

13

คำถามนี้เก่าและมีมุมมองมากมายดังนั้นฉันจะทิ้งบางสิ่งไว้ที่นั่นเพื่อช่วยคนที่ฉันมั่นใจ

ในการตรวจสอบว่าองค์ประกอบที่เลือกมีรายการที่เลือกหรือไม่:

if ($('#mySelect option:selected').length > 0) { alert('has a selected item'); }

หรือเพื่อตรวจสอบว่าการเลือกไม่มีอะไรเลือก:

if ($('#mySelect option:selected').length == 0) { alert('nothing selected'); }

หรือถ้าคุณอยู่ในวงวนของการเรียงลำดับและต้องการตรวจสอบว่ามีการเลือกองค์ประกอบปัจจุบันหรือไม่:

$('#mySelect option').each(function() {
    if ($(this).is(':selected')) { .. }
});

เพื่อตรวจสอบว่าองค์ประกอบไม่ได้ถูกเลือกขณะอยู่ในลูปหรือไม่:

$('#mySelect option').each(function() {
    if ($(this).not(':selected')) { .. }
});

นี่คือวิธีที่จะทำสิ่งนี้ jQuery มีหลายวิธีในการทำสิ่งเดียวกันดังนั้นคุณมักจะเลือกว่าอันไหนจะมีประสิทธิภาพมากที่สุด


"ไม่" ไม่ทำงานสำหรับฉัน $ ('# ตัวเลือก mySelect') แต่ละตัว (ฟังก์ชั่น () {ถ้า ($ (นี่). not (': เลือก')) {.. }}); ดังนั้นการใช้การปฏิเสธเป็นเช่นถ้า (! $ (นี้) .is (': เลือก')) {.. } เบราว์เซอร์: Chrome; Jquery เวอร์ชั่น: 3.1.1
Anil kumar

12

คำตอบของ lencioniคือสิ่งที่ฉันอยากจะแนะนำ คุณสามารถเปลี่ยนตัวเลือกสำหรับตัวเลือก('#mySelect option:last')เพื่อเลือกตัวเลือกด้วยค่าเฉพาะโดยใช้ " #mySelect option[value='yourDefaultValue']" เพิ่มเติมเกี่ยวกับตัวเลือก

หากคุณกำลังทำงานอย่างกว้างขวางกับรายการเลือกที่ลูกค้าตรวจสอบปลั๊กอินนี้: http://www.texotela.co.uk/code/jquery/select/ ดูที่แหล่งข้อมูลหากคุณต้องการดูตัวอย่างเพิ่มเติมเกี่ยวกับการทำงานกับรายการที่เลือก


9

นี่คือฟังก์ชั่นของฉันเปลี่ยนตัวเลือกที่เลือก มันใช้งานได้กับ jQuery 1.3.2

function selectOption(select_id, option_val) {
    $('#'+select_id+' option:selected').removeAttr('selected');
    $('#'+select_id+' option[value='+option_val+']').attr('selected','selected');   
}





2

นี่เป็นสคริปต์ด่วนที่ฉันพบว่าใช้ได้ผล ... .Result ถูกกำหนดให้กับป้ายกำกับ

$(".Result").html($("option:selected").text());



1

ฉันพบวิธีที่ดีในการตรวจสอบหากมีการเลือกตัวเลือกและเลือกค่าเริ่มต้นเมื่อไม่มี

    if(!$('#some_select option[selected="selected"]').val()) {
        //here code if it HAS NOT selected value
        //for exaple adding the first value as "placeholder"
        $('#some_select option:first-child').before('<option disabled selected>Wybierz:</option>');
    }

หาก#some_selectยังไม่ได้เลือกตัวเลือกเริ่มต้นแล้ว. val ()จะไม่ถูกกำหนด



0
$("#select_box_id").children()[1].selected

นี่เป็นอีกวิธีในการตรวจสอบว่ามีการเลือกตัวเลือกหรือไม่ สิ่งนี้จะส่งคืนบูลีน (จริงหรือเท็จ)

[1] คือดัชนีของตัวเลือกกล่องที่เลือก


0

เปลี่ยนเหตุการณ์ในกล่องเลือกเพื่อเริ่มและเมื่อมันทำเพียงแค่ดึงแอตทริบิวต์ id ของตัวเลือกที่เลือก: -

$("#type").change(function(){
  var id = $(this).find("option:selected").attr("id");

  switch (id){
    case "trade_buy_max":
      // do something here
      break;
  }
});

0

ฉันแค่มองหาบางสิ่งที่คล้ายกันและพบสิ่งนี้:

$('.mySelect:not(:has(option[selected])) option[value="2"]').attr('selected', true);

นี่จะค้นหาเมนูที่เลือกทั้งหมดในคลาสที่ยังไม่มีตัวเลือกที่เลือกไว้และเลือกตัวเลือกเริ่มต้น ("2" ในกรณีนี้)

ฉันลองใช้:selectedแทน[selected]แต่ไม่ได้ผลเพราะเลือกบางสิ่งอยู่เสมอแม้ว่าจะไม่มีคุณสมบัติใด ๆ ก็ตาม


0

หากคุณต้องการตรวจสอบแต่ละตัวเลือกอย่างชัดเจนเพื่อดูว่ามีคุณลักษณะ "เลือก" หรือไม่คุณสามารถทำได้ มิฉะนั้นจะใช้option:selectedคุณจะได้รับค่าสำหรับตัวเลือกเริ่มต้นแรก

var viewport_selected = false;      
$('#viewport option').each(function() {
    if ($(this).attr("selected") == "selected") {
        viewport_selected = true;
    }
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.