HTML Formu: Select-Option ve Datalist-Option karşılaştırması


136

Select-Option ve Datalist-Option arasındaki farkların ne olduğunu merak ediyordum. Birini veya diğerini kullanmanın daha iyi olacağı bir durum var mı? Her birine bir örnek:

Seç-Seçenek

<select name="browser">
<option value="firefox">Firefox</option>
<option value="ie">IE</option>
<option value="chrome">Chrome</option>
<option value="opera">Opera</option>
<option value="safari">Safari</option>
</select>

Datalist-Seçenek

<input type=text list=browsers>
<datalist id=browsers>
  <option value="Firefox">
  <option value="IE">
  <option value="Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>

11
HTML5 özellikle alıntılanmamış
james.garriss

1
optionDatalist seçeneğindeki etiketi neden kapatmadığımızı bilen var mı? Sublime istiyor gibi görünüyor
Johnny Metz

1
@ johnny Metz Etiketi kapatabilirsiniz, ancak kendi kendine kapanabilir, bunun gibi bir şey de yapabilirsiniz: code <input list = "browsers" name = "browser"> <datalist id = "browsers"> <seçenek değeri = "firefox" > Firefox </option> <option value = "ie"> IE </option> <option value = "chrome"> Chrome </option> <option value = "opera"> Opera </option> <option value = " safari "> Safari </option> </datalist> codeSonuç garip. Veri listeleri listedeki değeri yazdırır. Bu değer daha sonra giriş alanının değeri olur.
Sarah M Giles

3
@JohnnyMetz, HTML 5 kısmen XHTML'ye karşı bir tepkidir. Belirli elemanlar için, örneğin option, kapanış etiketine veya kendi kendine kapanmaya gerek yoktur. HTML 5! = XHTML.
james.garriss

2
Spesifikasyonda "Bazı normal elemanların başlangıç ​​ve bitiş etiketleri atlanabilir." Ayrıca, "seçenek öğesinin hemen ardından başka bir seçenek öğesinin gelmesi ya da hemen bir optik grup öğesinin gelmesi ya da üst öğede başka içerik yoksa, bir seçenek öğesinin bitiş etiketi atlanabilir." w3.org/TR/html/syntax.html#optional-tags
james.garriss

Yanıtlar:


180

Bunu bir gereklilik ve öneri arasındaki fark olarak düşünün. İçin selecteleman, kullanıcı Verdiğiniz seçeneklerden birini seçmek için gereklidir. İçin datalisteleman, kullanıcının Verdiğiniz seçeneklerden birini seçmek ileri sürülmektedir ama aslında o girişteki istediği her şeyi girebilirsiniz.

Düzenleme 1: Hangisini kullandığınıza göre gereksinimlerinize bağlı. Kullanıcının seçimlerinizden birini girmesi gerekiyorsaselect öğeyi kullanın . Kullanım herhangi bir şey girebiliyorsa, datalistöğeyi kullanın .

Edit 2: Bu tidbit'i HTML Living Standard'da buldu : "Datalist öğenin torunu olan her seçenek öğesi ... bir öneriyi temsil eder."


Ayrıca, diğer tarayıcılarda çoğunlukla [kısmi destek] (( caniuse.com/#feat=datalist ) vardır, uzun datalistler gibi hatalar kaydırılamaz hale gelir, vb.
Govind Rai

Şu anda kromda, veri girilirse (yazılırsa) okun tıklanmasını engeller. Bu muhtemelen çoğu durumda ideal değildir.
David

66

Teknik açıdan tamamen farklılar. <datalist>diğer öğeler için seçeneklerin soyut bir kapsayıcıdır. Sizin durumunuzla birlikte <input type="text"kullandığınız halde aralıklar, renkler, tarihler vb. İle de kullanabilirsiniz. Http://demo.agektmr.com/datalist/

Metin girişi ile, otomatik tamamlama türü olarak kullanılıyorsa, soru gerçekten şudur: Serbest biçimli bir metin girişi veya önceden belirlenmiş bir seçenekler listesi kullanmak daha mı iyidir? Bu durumda cevabın biraz daha açık olduğunu düşünüyorum.

<datalist>Bir metin alanı için seçeneklerin bir listesi olarak kullanılmaya odaklanırsak, bu ve bir seçim kutusu arasındaki bazı belirli farklılıklar şunlardır:

  • Bir <datalist>beslenen metin kutusu ekran etiket ve göndermek için tek bir dizi bulunur. Bir seçim kutusunun, görüntüleme etiketine göre farklı bir gönderme değeri olabilir <option value='ie'>Internet Explorer</option>.
  • Bir <datalist>beslenen metin kutusu desteklemediği <optgroup>ekranı organize etmek etiketi.
  • Bir kullanıcıyı, a <datalist>ile yapabileceğiniz benzerler listesiyle sınırlandıramazsınız <select>.
  • Onchange olay farklı çalışır. Bir <select>öğe üzerinde, onchange olayı değişiklik üzerine hemen <input type="text"tetiklenirken, öğe ile odak odak kaybolduktan veya kullanıcı enter tuşuna bastıktan sonra tetiklenir.
  • <datalist>tarayıcılarda gerçekten sivilceli bir desteği var. Mevcut tüm seçenekleri göstermenin yolu tutarsızdır ve işler oradan daha da kötüleşir.

Son nokta bence gerçekten büyük olan. Daha evrensel bir otomatik tamamlama yedeğine sahip olmanız gerektiğinden, a <datalist>. Artı herhangi terbiyeli otomatik tamamlama pluging stiline yollardan senin seçeneklerin ekran, olanak sağlayacaktır <datalist>yapmaz. İstediğiniz gibi manipüle edebileceğiniz <datalist>kabul edilen <li>öğeler gerçekten harika olurdu! Ama hayır.

Ayrıca anlayabildiğim kadarıyla, <datalist>arama dizenin başından itibaren tam bir eşleşmedir. Eğer olsaydı <option value="internet explorer">ve 'kaşif' için arama yaparsanız sonuç alamazsınız. Çoğu otomatik tamamlama eklentisi metnin herhangi bir yerinde arama yapar.

<datalist>Kullanıcıların en son Chrome veya Firefox'a sahip olduğunu ve sahte değerler göndermeye çalışmadığını% 100 kesin olarak bildiğim bazı dahili sayfalar için hızlı ve tembel bir kolaylık yardımcısı olarak kullandım . Diğer her durumda, <datalist>çok zayıf tarayıcı desteği nedeniyle kullanılmasını önermek zordur .


3
Mükemmel cevap !! Lütfen ikinci merminizi açıklar mısınız? "Görüntüyü düzenlemek için seçenek grupları" ile ne demek istiyorsun? Teşekkürler.
Govind Rai

afaik (2019'da Chrome ve Firefox'ta) <datalist>, eklerle eşleşir (yalnızca öneklerle değil). yani "re" yazmak hem "Firefox" hem de "Internet Explorer" ı önerir.
sam boosalis

@GovindRai "optgroup element" i lanetli arama bu sayfayı her zaman yararlı
MDN'den

Firefox 66 ve Chrome 73 altında test ettim - aslında, veri etiketi her yerde eşleşir, bu nedenle örneğin veri listenizde ülke adları varsa, "ted" "ABD" ve "İngiltere" ile eşleşir.
Błotosmętek

5

Datalist, otomatik tamamlama ve önerileri yerel olarak içerir, ayrıca kullanıcının önerilerde tanımlanmayan bir değer girmesine izin verebilir.

Seç yalnızca kullanıcının aralarından seçim yapabileceği önceden tanımlanmış seçenekler sunar


2

Veri Listesi, HTML5 destekli tarayıcılarda yeni bir HTML etiketidir. Bazı seçenekler listesiyle bir metin kutusu olarak işler. Cinsiyet Metin kutusuna Örnek olarak, Metin Kutusuna 'M' veya 'F' yazdığınızda size Erkek Kadın olarak seçenekler sunar.

<input list="Gender">
<datalist id="Gender">
  <option value="Male">
  <option value="Female> 
</datalist>

5
Doğru, ama güzel, yeni bir bilgi verir, yani ilk harfi yazdığınızda listedeki karşılık gelen öğeleri seçecektir.
james.garriss

1

"Birini veya diğerini kullanmanın daha iyi olacağı herhangi bir durum var mı?" Yinelenen bölüm çok sayıda selectetiket içeriyorsa , optionher seçim için s, her satır için oluşturulmalıdır.

Böyle bir durumda, datalistile kullanmayı düşünürüm input, çünkü aynı datalistşey herhangi bir sayı için kullanılabilir input. Bu, sunucuda büyük miktarda oluşturma süresi kazandırabilir ve herhangi bir sayıda satıra çok daha iyi ölçeklenebilir.


Kullanıcıya aralarından seçim yapabileceğiniz seçenekler sunmaya zahmet etmeyecekseniz, neden bir veri listesi kullanmaya zahmet ediyorsunuz? Bunun yerine bir metin alanı kullanın.
james.garriss

0

Datalistte seçilen bir özellik olmadığını fark ettim. Size sadece seçenek sunar, ancak varsayılan bir seçeneği olamaz. Seçilen seçeneği bir sonraki sayfada da gösteremezsiniz.


Bir giriş artı veri listesinin eşdeğeri, girişin kendisinde = "(varsayılan seçenek)" değerini ayarlamak olacaktır. Type = "text" olan bir giriş için bu metin varsayılan olarak görünür ancak düzenlenebilir.
Bemisawa

0

selectVe arasında başka bir önemli fark vardır datalist. İşte tarayıcı destek faktörü geliyor.

select, datalistlere kıyasla tarayıcılar tarafından yaygın olarak desteklenir. Veri yazarının tam tarayıcı desteği için lütfen bu sayfaya bakın.

Datalist tarayıcı desteği

Seçili olarak tüm tarayıcılarda etkin bir şekilde desteklenir (IE6 +, Firefox 2+, Chrome 1+ vb. Beri)


0

Seçime benzer, ancak datalist otomatik önerme gibi ek işlevlere sahiptir. Hatta yazarken ve yazarken önerileri bile yazabilir ve görebilirsiniz.

Kullanıcı ayrıca listede olmayan öğeleri de yazabilir.

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.