HTML выберите форму с возможностью ввода пользовательского значения - PullRequest
62 голосов
/ 13 апреля 2011

Я хотел бы иметь поле ввода, чтобы пользователи могли вводить пользовательское текстовое значение или выбирать из выпадающего списка, Обычный выбор предлагает только выпадающие варианты.

Как можно принять пользовательское значение, например, ford?

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

Редактировать : Удалена неработающая ссылка, решения есть в ответах.

Ответы [ 5 ]

167 голосов
/ 22 февраля 2014

HTML5 имеет встроенное поле со списком.Вы создаете текст input и datalist.Затем вы добавляете атрибут list к input со значением id из datalist.

Помните, что datalist делает не работает во всех браузерах .См. caniuse для подробной поддержки браузера.

Выглядит это так:

<input type="text" list="cars" />
<datalist id="cars">
  <option>Volvo</option>
  <option>Saab</option>
  <option>Mercedes</option>
  <option>Audi</option>
</datalist>
18 голосов
/ 28 мая 2014

Последний JSFiddle от Alen Saqe не переключался на меня в Firefox, поэтому я подумал, что предоставлю простой обходной путь html / javascript, который будет хорошо работать в формах (относительно отправки) до того дня, когда тег списка данных будет принят всеми браузерами / устройство. Для получения более подробной информации и просмотра его в действии перейдите по адресу: http://jsfiddle.net/6nq7w/4/ Примечание. Не допускайте пробелов между переключающими братьями и сестрами!

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

10 голосов
/ 23 мая 2014

Решение jQuery!

Демо: http://jsfiddle.net/69wP6/2/

Еще одна демонстрация ниже (обновлено!)

Мне нужно было что-то подобное в случае, когда у меня были фиксированные параметры, и я хотел, чтобы еще один параметр был редактируемым! В этом случае я сделал скрытый ввод, который бы перекрывал опцию выбора и был бы редактируемым, и использовал jQuery, чтобы все это работало без проблем.

Я делюсь скрипкой со всеми вами!

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

Редактировать: Добавлено несколько простых штрихов в дизайне, чтобы люди могли ясно видеть, где заканчивается ввод!

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

10 голосов
/ 13 апреля 2011

Вы не можете на самом деле.Вам нужно иметь как выпадающий список, так и текстовое поле, и они должны выбрать или заполнить форму.Без javascript вы могли бы создать отдельный набор радиокнопок, в котором они выбирают раскрывающийся список или ввод текста, но мне это кажется беспорядочным.С помощью некоторого javascript вы можете отключить один или другой в зависимости от того, какой из них они выберут, например, в раскрывающемся списке есть опция «other», которая вызывает текстовое поле.

4 голосов
/ 13 июля 2018

Если опция списка данных не удовлетворяет вашим требованиям, посмотрите библиотеку Select2 и « Динамическое создание опции »

$(".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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...