Saya ingin memiliki kolom input yang dapat digunakan pengguna untuk memasukkan nilai teks kustom atau memilih dari drop down. A regular <select>
hanya menawarkan opsi drop down.
Bagaimana saya bisa membuat <select>
nilai kustom terima? Misalnya: Ford?
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
Jawaban:
HTML5 memiliki kotak kombo built-in. Anda membuat teks
input
dan adatalist
. Kemudian Anda menambahkanlist
atribut keinput
, dengan nilaiid
daridatalist
.Pembaruan: Mulai Maret 2019 semua browser utama (sekarang termasuk Safari 12.1 dan iOS Safari 12.3) mendukung
datalist
ke tingkat yang diperlukan untuk fungsionalitas ini. Lihat caniuse untuk dukungan browser mendetail.Ini terlihat seperti ini:
<input type="text" list="cars" /> <datalist id="cars"> <option>Volvo</option> <option>Saab</option> <option>Mercedes</option> <option>Audi</option> </datalist>
sumber
<input type="text" list="cars" style="background:url('images/arrow_down.png') no-repeat right center">
JSFiddle terbaru Alen Saqe tidak mengaktifkan saya di Firefox, jadi saya pikir saya akan memberikan solusi html / javascript sederhana yang akan berfungsi dengan baik dalam formulir (terkait pengiriman) hingga hari tag datalist diterima oleh semua browser / perangkat. Untuk lebih jelasnya dan melihatnya beraksi, kunjungi: http://jsfiddle.net/6nq7w/4/ Catatan: Jangan biarkan ada spasi di antara saudara kandung!
<!DOCTYPE html> <html> <script> function toggleField(hideObj,showObj){ hideObj.disabled=true; hideObj.style.display='none'; showObj.disabled=false; showObj.style.display='inline'; showObj.focus(); } </script> <body> <form name="BrowserSurvey" action="#"> Browser: <select name="browser" onchange="if(this.options[this.selectedIndex].value=='customOption'){ toggleField(this,this.nextSibling); this.selectedIndex='0'; }"> <option></option> <option value="customOption">[type a custom value]</option> <option>Chrome</option> <option>Firefox</option> <option>Internet Explorer</option> <option>Opera</option> <option>Safari</option> </select><input name="browser" style="display:none;" disabled="disabled" onblur="if(this.value==''){toggleField(this,this.previousSibling);}"> <input type="submit" value="Submit"> </form> </body> </html>
sumber
Solusi jQuery!
Demo: http://jsfiddle.net/69wP6/2/
Demo Lain Di Bawah (diperbarui!)
Saya membutuhkan sesuatu yang serupa dalam kasus ketika saya memiliki beberapa Opsi tetap dan saya ingin satu opsi lain dapat diedit! Dalam hal ini saya membuat input tersembunyi yang akan tumpang tindih dengan opsi pilih dan akan dapat diedit dan menggunakan jQuery untuk membuat semuanya bekerja dengan mulus.
Saya berbagi biola dengan Anda semua!
HTML
<div id="billdesc"> <select id="test"> <option class="non" value="option1">Option1</option> <option class="non" value="option2">Option2</option> <option class="editable" value="other">Other</option> </select> <input class="editOption" style="display:none;"></input> </div>
CSS
body{ background: blue; } #billdesc{ padding-top: 50px; } #test{ width: 100%; height: 30px; } option { height: 30px; line-height: 30px; } .editOption{ width: 90%; height: 24px; position: relative; top: -30px }
jQuery
var initialText = $('.editable').val(); $('.editOption').val(initialText); $('#test').change(function(){ var selected = $('option:selected', this).attr('class'); var optionText = $('.editable').text(); if(selected == "editable"){ $('.editOption').show(); $('.editOption').keyup(function(){ var editText = $('.editOption').val(); $('.editable').val(editText); $('.editable').html(editText); }); }else{ $('.editOption').hide(); } });
Sunting: Menambahkan beberapa desain sentuhan sederhana yang bijaksana, sehingga orang dapat dengan jelas melihat di mana input berakhir!
JS Fiddle: http://jsfiddle.net/69wP6/4/
sumber
Anda tidak bisa. Anda harus memiliki drop down, dan kotak teks, dan meminta mereka memilih atau mengisi formulir. Tanpa javascript Anda dapat membuat satu set tombol radio terpisah di mana mereka memilih dropdown atau input teks, tapi ini tampak berantakan bagi saya. Dengan beberapa javascript, Anda dapat menonaktifkan satu atau lainnya tergantung pada mana yang mereka pilih, misalnya, memiliki opsi 'lainnya' di tarik-turun yang memicu bidang teks.
sumber
Jika opsi datalist tidak memenuhi persyaratan Anda, lihat pustaka Select2 dan " Pembuatan opsi dinamis "
$(".js-example-tags").select2({ tags: true });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script> <select class="form-control js-example-tags"> <option selected="selected">orange</option> <option>white</option> <option>purple</option> </select>
sumber
Menggunakan salah satu solusi di atas (@mickmackusa), saya membuat prototipe yang berfungsi di React 16.8+ menggunakan Hooks.
https://codesandbox.io/s/heuristic-dewdney-0h2y2
Saya harap ini membantu seseorang.
sumber