ฉันมีรายการselectที่แสดงเลือกภาษาในตอนแรกจนกว่าผู้ใช้จะเลือกภาษา เมื่อผู้ใช้เปิดการเลือกฉันไม่ต้องการให้แสดงตัวเลือกเลือกภาษาเพราะไม่ใช่ตัวเลือกจริง
ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?
ฉันมีรายการselectที่แสดงเลือกภาษาในตอนแรกจนกว่าผู้ใช้จะเลือกภาษา เมื่อผู้ใช้เปิดการเลือกฉันไม่ต้องการให้แสดงตัวเลือกเลือกภาษาเพราะไม่ใช่ตัวเลือกจริง
ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?
คำตอบ:
โซลูชันของ Kyleทำงานได้ดีสำหรับฉันดังนั้นฉันจึงทำการวิจัยเพื่อหลีกเลี่ยง Js และ CSS ใด ๆ แต่เพียงแค่ยึดติดกับ HTML การเพิ่มค่าของselectedรายการที่เราต้องการให้ปรากฏเป็นส่วนหัวจะบังคับให้รายการนั้นแสดงเป็นตัวยึดตำแหน่งตั้งแต่แรก สิ่งที่ต้องการ:
<option selected disabled>Choose here</option>มาร์กอัปที่สมบูรณ์ควรอยู่ตามบรรทัดเหล่านี้:
<select>
    <option selected disabled>Choose here</option>
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
    <option value="5">Five</option>
</select>คุณสามารถดูซอนี้และนี่คือผลลัพธ์:
หากคุณไม่ต้องการให้ประเภทของข้อความตัวยึดตำแหน่งปรากฏในรายการตัวเลือกเมื่อผู้ใช้คลิกที่ช่องเลือกเพียงแค่เพิ่มhiddenแอตทริบิวต์ดังนี้:
<select>
    <option selected disabled hidden>Choose here</option>
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
    <option value="5">Five</option>
</select>ตรวจสอบซอที่นี่และภาพหน้าจอด้านล่าง
hiddendisplay: none
                    hiddenบนoptionในselectไม่ทำงานใน Safari บน iOS อย่างใดอย่างหนึ่งหรือ Mac คำตอบนี้จึงให้การสนับสนุนเบราว์เซอร์เพียงบางส่วน
                    นี่คือวิธีแก้ปัญหา:
<select>
    <option style="display:none;" selected>Select language</option>
    <option>Option 1</option>
    <option>Option 2</option>
</select>selected="true"ไม่ถูกต้อง ให้ใช้selected="selected"ใน (X) HTML หรือเพียงแค่selectedใน HTML ดูเหมือนว่าคุณสับสนselectedแอตทริบิวต์กับselectedคุณสมบัติซึ่งมีการเปลี่ยนแปลงดังนี้myOption.selected = true;หรือmyOption.selected = false;
                    hidden (ซึ่งก็คือ"ใช้งานโดยทั่วไปใน CSS"โดยใช้display: noneต่อไป) โดยใช้display: noneกับสิ่งที่optionไม่ทำงานใน Safari ตัวเลือกยังคงปรากฏขึ้น
                    วิธีที่เหมาะสมและมีความหมายคือการใช้ตัวเลือกป้ายตัวยึด :
optionองค์ประกอบเป็นลูกคนแรกของselectvalue= ""เป็นoptionoptionrequiredแอตทริบิวต์ลงในไฟล์selectการดำเนินการนี้จะบังคับให้ผู้ใช้เลือกตัวเลือกอื่นเพื่อให้สามารถส่งแบบฟอร์มได้และเบราว์เซอร์ควรแสดงไฟล์optionเป็นที่ต้องการ:
หากองค์ประกอบที่เลือกมีตัวเลือกป้ายตัวยึดตำแหน่งตัวแทนผู้ใช้คาดว่าจะแสดงผลอ็อพชันนั้นในลักษณะที่บ่งบอกว่าเป็นเลเบลแทนที่จะเป็นอ็อพชันที่ถูกต้องของคอนโทรล
optionอย่างไรก็ตามเบราว์เซอร์ส่วนใหญ่จะทำให้มันเป็นปกติ ดังนั้นเราจะต้องทำการแก้ไขด้วยตนเองโดยเพิ่มสิ่งต่อไปนี้ในไฟล์option :
selectedแอตทริบิวต์ที่จะทำให้มันเลือกโดยค่าเริ่มต้นdisabledแอตทริบิวต์ที่จะทำให้มันไม่ใช่เลือกโดยผู้ใช้display: noneเพื่อซ่อนจากรายการค่าselect > .placeholder {
  display: none;
}<select required>
  <option class="placeholder" selected disabled value="">Select language</option>
  <option>Option 1</option>
  <option>Option 2</option>
</select>hiddenแอตทริบิวต์ลงในแท็กตัวเลือกตัวยึดแทนdisplay: noneเนื่องจากดูเหมือนว่าเบราว์เซอร์มือถือส่วนใหญ่จะเพิกเฉยต่อdisplay: noneแอตทริบิวต์ CSS และในความคิดของฉันก็ยิ่งถูกต้องตามความหมาย
                    hiddenโดยทั่วไปมีการใช้งานdisplay: noneภายใต้ประทุน (และข้อกำหนดนี้แนะนำอย่างชัดเจนว่าเป็นการใช้งาน "ทั่วไป") ด้วยเหตุนี้ฉันจึงแปลกใจถ้ามีเบราว์เซอร์ใด ๆ ไม่ว่าจะเป็นมือถือหรืออย่างอื่น - ที่ไหนใช้hiddenงานได้ แต่display: noneไม่มี คุณสามารถให้ตัวอย่างได้หรือไม่?
                    เนื่องจากคุณไม่สามารถใช้กำหนดตัวยึดตำแหน่งสำหรับselectแท็กได้ฉันไม่เชื่อว่าจะมีวิธีใดที่จะทำสิ่งที่คุณขอด้วย HTML / CSS ที่บริสุทธิ์ได้ อย่างไรก็ตามคุณสามารถทำสิ่งนี้:
<select>
  <option disabled="disabled">Select language</option>
  <option>Option 1</option>
</select>"เลือกภาษา" จะปรากฏขึ้นในเมนูแบบเลื่อนลง แต่เมื่อเลือกตัวเลือกอื่นแล้วจะไม่สามารถเลือกใหม่ได้
ฉันหวังว่าจะช่วยได้
ลองสิ่งนี้:
<div class="selectSelection">
    <select>
        <option>Do not display</option>
        <option>1</option>
        <option>1</option>
    </select>
</div>ใน CSS:
.selectSelection option:first-child{
    display:none;
}ฉันมีวิธีแก้ปัญหาโดยมีช่วงแสดงอยู่เหนือตัวเลือกจนกว่าการเลือกจะเสร็จ span แสดงข้อความเริ่มต้นดังนั้นจึงไม่อยู่ในรายการข้อเสนอ:
HTML:
<span id="default_message_overlay">Default message</span>
<select id="my_select">
    <option value="1">Option 1</option>  
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
</select>CSS:
#default_message_overlay {
    position: absolute;
    display: block;
    width: 120px;
    color: grey;
}
select {
    width: 150px;
}Javascript (พร้อม JQuery):
$(document).ready(function() {
    // No selection at start
    $('#my_select').prop("selectedIndex", -1);
    // Set the position of the overlay
    var offset = $('#my_select').offset();
    offset.top += 3;
    offset.left += 3;
    $('#default_message_overlay').offset(offset);
    // Remove the overlay when selection changes
    $('#my_select').change(function() {
        if ($(this).prop("selectedIndex") != -1) {
            $('#default_message_overlay').hide();
        }
    });
});ผมได้ทำjsfiddle สำหรับการสาธิต ทดสอบกับ Firefox และ IE8
spanในนั้นlegendและนั่นจะสมบูรณ์แบบหรือlabel
                    pointer-events: noneช่วงเวลาของคุณเพื่อให้คลิกผ่านเพื่อเลือก
                    <option value="" id="ddl" name="prop" style="display:none;" disabled selected>chose something </option>แน่นอนคุณสามารถย้าย css ไปยังไฟล์ css ได้หากต้องการและวางสคริปต์เพื่อจับescปุ่มเพื่อเลือกปิดใช้งานอีกครั้ง ซึ่งแตกต่างจากคำตอบอื่น ๆ ที่ฉันใส่ไว้value=""หากคุณส่งค่าของรายการที่คุณเลือกด้วยแบบฟอร์มจะไม่มี "เลือกบางอย่าง" ใน asp.net mvc 5 ส่งเป็น json ที่คอมไพล์ด้วยvar obj = { prop:$('#ddl').val(),...};และJSON.stringify(obj);ค่าของ prop จะเป็นโมฆะ
Op1:
$("#MySelectid option").each(function () {
        if ($(this).html() == "text to find") {
            $(this).attr("selected", "selected");
            return;
        }
});Op2:
$('#MySelectid option')
.filter(function() { return $.trim( $(this).text() ) == 'text to find'; }).attr('selected','selected');