Açılır listede gösterilmeyecek varsayılan metin


108

Bir var selectbaşlangıçta gösteren seç dili Kullanıcı seçer bir dil kadar. Kullanıcı seçimi açtığında, gerçek bir seçenek olmadığı için bunun bir Dil seçin seçeneğini göstermesini istemiyorum .

Bunu nasıl başarabilirim?

Yanıtlar:


214

Kyle'ın çözümü benim için mükemmel çalıştı, bu yüzden herhangi bir Js ve CSS'den kaçınmak için araştırmamı yaptım, ancak sadece HTML'ye bağlı kaldım. selectedBaşlık olarak görünmesini istediğimiz öğeye bir değer eklemek, onu ilk etapta yer tutucu olarak göstermeye zorlar. Gibi bir şey:

<option selected disabled>Choose here</option>

İşaretlemenin tamamı şu satırlar boyunca olmalıdır:

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

Bu kemana bir göz atabilirsin ve işte sonuç:

görüntü açıklamasını buraya girin

Eğer varsa yok seçin kutusunda bir kullanıcı tarafından tıklanıp kez seçeneklerinde listelenen görünür için yer tutucu metnin tür istediğiniz gibi eklemek hiddenşöyle niteliğini:

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

Burada kemanı ve aşağıdaki ekran görüntüsünü kontrol edin .

görüntü açıklamasını buraya girin


Bu harika bir cevap, ancak Angular JS'yi kullanırken, Angular otomatik olarak boş bir seçenek eklediğinden ve varsayılan olarak ayarladığından işe
yaramaz

Her neyse, sadece referans için, işte Angular'da
Nobita

Not o özellik yukarıdaki cevap kullanılan, ayar eşdeğer olduğu uygulanan (şart değil ama) herhangi bir HTML öğesine ayarlanır ve genellikle edilebilir bir özelliktir CSS ile. hiddendisplay: none
Mark Amery

2
Ayrıca hiddenbir optionin a ayarının selectSafari'de, iOS veya Mac'te çalışmadığını unutmayın. Bu yanıt, bu nedenle yalnızca kısmi tarayıcı desteği sunar.
Mark Amery

1
Bu güzel!
Fibo Kowalsky

59

İşte çözüm:

<select>
    <option style="display:none;" selected>Select language</option>
    <option>Option 1</option>
    <option>Option 2</option>
</select>

5
selected="true"Geçersiz olduğunu unutmayın . Bunun yerine, selected="selected"(X) HTML'de veya sadece selectedHTML'de kullanın. Görünüşe göre özelliği mülk selectedile karıştırmışsınız selected, bu şu şekilde değiştirilmiştir: myOption.selected = true;veyamyOption.selected = false;
Oriol

2
"display: none", Android ve iOS gibi cihaza özgü seçimleri kullanan tarayıcılar tarafından yok sayılır. Seçeneği select.focus'da DOM'dan kaldırmanız ve çalıştırması için geri döndürüp select.blur'da seçmeniz gerekir.
Radek Pech

1; gibi kullanarak Nobita cevabıhidden (edilmektedir "tipik CSS uygulanan" kullanarak display: nonekullanarak zaten), display: nonebir de optionSafari'de işi yapmaz; seçenek hala görünüyor.
Mark Amery

50

Doğru ve anlamsal yol, bir yer tutucu etiket seçeneği kullanmaktır :

  • optionÖğenin ilk alt öğesi olarak bir öğe ekleyinselect
  • Set Bunavalue= ""option
  • Yer tutucu metni bunun içeriği olarak ayarlayın option
  • Ekle requirediçin öznitelikselect

Bu formu göndermek edebilmek için başka bir seçenek seçmek için zorlar ve tarayıcılar gerektiğini haleoption istenen:

Bir seçme öğesi bir yer tutucu etiket seçeneği içeriyorsa, kullanıcı aracısının bu seçeneği, denetimin geçerli bir seçeneği yerine bunun bir etiket olduğunu aktaracak şekilde oluşturması beklenir.

Ancak çoğu tarayıcı bunu normal bir şekilde işleyecektir option. Bu nedenle, aşağıdakileri ekleyerek manuel olarak düzeltmemiz gerekecek option:

  • selectedNitelik, bunu yapmak için seçilen varsayılan olarak
  • disabledNiteliği, kullanıcı tarafından bu olmayan seçilebilir hale getirmek için
  • display: none, değerler listesinden gizlemek için

select > .placeholder {
  display: none;
}
<select required>
  <option class="placeholder" selected disabled value="">Select language</option>
  <option>Option 1</option>
  <option>Option 2</option>
</select>


Bunun bile (buradaki tüm cevaplardan bu sorunu çözmeye yönelik en kapsamlı girişim) bile iOS veya Mac'te Safari'de çalışmadığı unutulmamalıdır. Seçim açıldığında seçenek hala devam edecektir.
Mark Amery

@MarkAmery @Nobita cevabında önerildiği gibi davranmanızı ve çoğu mobil tarayıcının CSS özelliğini görmezden geldiği ve bence anlamsal olarak daha doğru olduğu görüldüğü için hiddenözniteliği yer tutucu seçenek etiketine eklemenizi öneririm . display: nonedisplay: none
Gaboik1

@ Gaboik1 Bu yanıtla ilgili yorumlarda, bunun hiddengenellikle display: nonebaşlık altında uygulandığını belirttim (ve spesifikasyon bunu açıkça "tipik" bir uygulama olarak öneriyor). Bu nedenle, mobil veya başka bir tarayıcıda hiddençalışıp display: noneçalışmadığına şaşırırdım. Herhangi bir örnek verebilir misiniz?
Mark Amery

21

selectEtiketler için yer tutucu atamayı kullanamayacağınız için, saf HTML / CSS ile tam olarak istediğiniz şeyi yapmanın bir yolu olduğuna inanmıyorum. Ancak bunun gibi bir şey yapabilirsiniz:

<select>
  <option disabled="disabled">Select language</option>
  <option>Option 1</option>
</select>

Açılır menüde "Dil seçin" görünecektir, ancak başka bir seçenek belirlendikten sonra yeniden seçilmesi mümkün olmayacaktır.

Umarım bu yardımcı olur.


2
En iyisinin devre dışı bırakılan ve style = "display: none;" ile seçilen kombinasyonu olduğunu buldum. devre dışı, doğrulama gerçekleştirmek istediğinizde kullanışlıdır - varsayılan olarak hiçbir etkin seçeneğin seçilmediğinden emin olur.
Illarion Kovalchuk

-1 çünkü buradaki diğer cevaplar (özellikle Nobtia ve Oriol'lar) hem çok daha açıklayıcı ayrıntılar hem de çok daha eksiksiz çözümler sağlar.
Mark Amery

7

Bunu dene:

<div class="selectSelection">
    <select>
        <option>Do not display</option>
        <option>1</option>
        <option>1</option>
    </select>
</div>

CSS'de:

.selectSelection option:first-child{
    display:none;
}

Bu yanıt, diğer yanıtların daha ayrıntılı olarak içermediği hiçbir şeyi içermez, ayrıca kötü biçimlendirmeye sahiptir; -1.
Mark Amery

5

Bir seçim yapılana kadar seçimin üzerinde görüntülenen aralığı olan bir çözümüm var. Aralık, varsayılan mesajı görüntüler ve bu nedenle, önermeler listesinde değildir:

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 ile):

$(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();
        }
    });
});

Demo için bir jsfiddle yaptım . Firefox ve IE8 ile test edilmiştir.


OSX üzerinde Chrome her zaman seçilen ilk seçeneği gösterir, ancak OSX'e özgü gibi görünür, çünkü burada sağlanan tüm çözümler ilk görünür seçeneğin seçilmesini sağlar.
Gamadril

spanorada yerine kullanın legendve bu mükemmel olurdu ya dalabel
karlcow

Bu ilginç bir yaklaşım ve bu davranışı Safari'de çalıştırmanın tek olası yolu, ancak burada kötü bir şekilde uygulanıyor; En azından pointer-events: nonetıklamaların seçim için geçmesine izin vermek için aralığınıza ihtiyacınız var.
Mark Amery

0
<option value="" id="ddl" name="prop" style="display:none;" disabled selected>chose something </option>

Elbette isterseniz css'i bir css dosyasına taşıyabilir escve devre dışı bırakılanı tekrar seçmek için düğmeyi yakalamak için bir komut dosyası koyabilirsiniz . Verdiğim diğer benzer cevapların aksine value="", bu, eğer seçilen listenizin değerlerini bir formla gönderirseniz, "bir şey seçti" içermeyecek. Asp.net mvc 5 içinde json ile derlenmiş var obj = { prop:$('#ddl').val(),...};ve JSON.stringify(obj);prop değeri null olacaktır.


0

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');​​​​​​​
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.