2011-04-13 54 views
34

Kullanıcıların özel metin değeri girebileceği veya açılan menüden yalnızca normal teklif seçenekleri sunabileceği giriş alanına sahip olmak istiyorum.HTML özel formunu girmek için bir seçenek seçin formunu seç

Örneğin ford için özel değeri nasıl kabul edebilir?

<select> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> 

Düzenleme: kaldırıldı ölü bağlantı çözümleri cevapları bulunmaktadır.

+0

dinamik seçme ama sonra bu bilgileri kullanarak gerçek bir ağrı olacak bir seçenek eklemek için javascript kullanabilirsiniz. – David

+0

Küçük bir komut dosyası ile yapabilirsiniz! Aşağıda cevapladım! –

cevap

8

Gerçekten yapamazsınız. Hem açılır menüye hem de metin kutusuna sahip olmanız ve bunların formu doldurup doldurmanız gerekir. Javascript olmadan, açılır menüyü veya metin girişini seçtikleri ayrı bir radyo düğmesi oluşturabilirsiniz, ancak bu bana rahatsızlık verici geliyor. Bazı javascript ile, hangisini seçtiğine bağlı olarak birini veya diğerini devre dışı bırakabilirsiniz, örneğin, metin alanını tetikleyen açılır menüde 'başka' seçeneği vardır.

+0

Açıkladığınız açıklamalara dayanarak aşağıdaki yorumlarda basit bir kod var! Hepsi uyumsuz! –

+0

Seçilen cevap, – Mark

116

HTML5 yerleşik birleşik giriş kutusuna sahiptir. Bir metin input ve bir datalist oluşturun. Sonra input'a list özniteliğini datalist'un id değerini ekleyerek eklersiniz.

Bu şuna benzer: ÖNEMLİ

<input type="text" list="cars" /> 
 
<datalist id="cars"> 
 
    <option>Volvo</option> 
 
    <option>Saab</option> 
 
    <option>Mercedes</option> 
 
    <option>Audi</option> 
 
</datalist>

: tüm r göz içinde datalistçalışmıyor unutmayın, aslında onun destek is still very inmature as of 2018 .not safari tarafından desteklenen hiç ve kısmen tüm diğer krom hariç.

+2

'un altındaki Dmitry'ya güncellenmelidir. Bu özellik, yalnızca tarayıcıların yaklaşık% 50'si tarafından desteklenir. Sadece en yeni firefox, krom ve opera bunu destekliyor; IE, Safari ve mobil tarayıcılar yok. Bkz. [Http://caniuse.com/](http://caniuse.com/#feat=datalist) – markmarijnissen

+2

IE 10+ sürümünde çalışıyor. Verdiğin kaynak bile öyle söyledi. – Dmitry

+3

Artık bile Safari'de çalışmıyor. – chowey

7

jQuery Çözümü!

Demo: http://jsfiddle.net/69wP6/2/

Aşağıda başka Demo i bazı sabit Seçenek vardı ve ben düzenlenebilir olmasını bir başka seçenek istediğinde bir durumda benzer bir şey gerekli

(güncellendi!)! Bu durumda, seçim seçeneğini üst üste bindirecek gizli bir giriş yaptım ve düzenlenebilir olacak ve jQuery'yi sorunsuz bir şekilde çalıştıracak şekilde kullanacağım.

Keman'ı hepinizle paylaşıyorum!

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

Düzenleme: insanlar girdi bittiği yerde net bir şekilde görebilir, böylece Eklendi bazı basit dokunuşlar, akıllı tasarım!

JS Fiddle: http://jsfiddle.net/69wP6/4/

8

Alen Saqe'nin en son JSFiddle Firefox benim için geçiş yoktu, bu yüzden ben basit bir html/güne kadar formlarda (ilgili başvuru) içinde güzel işleyecektir javascript çözüm sağlamayı düşündük datalist etiketin tüm tarayıcılar/cihazlar tarafından kabul edildiğini. Daha fazla detay için ve eyleme bakınız, şu adrese gidin: http://jsfiddle.net/6nq7w/4/ Not: Geçiş yapan kardeşler arasında boşluk bırakmayın!

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

+0

Tekrar fidle diye düşünmek istiyorum! Firefox'un cadı versiyonu orada desteklenmedi! Hatırlamadığım bir versiyonla test ettim! Kudos! –

+0

Hangi FF sürümünün açık olduğunu bilmiyorum. Sadece FF34.0'a bir göz attım ve şimdi işlevsellik alıyorum, endişelenmeyin. Ancak, varsayılan "Diğer" geçiş seçeneği temizlenebilir. Değeri düzenleyerek "Diğer" i kaldırdığımda, dropmenu seçmek için sezgisel bir değer sunmaz (düzenleme özelliğine erişmek için). Bence bu kişisel tercihe iner. Alan düzenlenebilir olduğunda dropmenu oku hala mevcut olduğundan, kullanıcılar alanın düzenlenebilir olduğunu fark etmeyebilir. Sana bir kazı yapmamak; sadece bazı geri bildirimler. Snippet'im ayrıca

'un içindeki alan adlandırmalarını da dikkate alır. – mickmackusa

İlgili konular