Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Изменять содержание <SELECT> в зависимости от значения введенного в <INPUT> (https://javascript.ru/forum/dom-window/47087-izmenyat-soderzhanie-select-v-zavisimosti-ot-znacheniya-vvedennogo-v-input.html)

icehummer 08.05.2014 05:46

Изменять содержание <SELECT> в зависимости от значения введенного в <INPUT>
 
Доброго времени суток!
Есть небольшая задачка:
Суть формы в том, чтобы добавлять в базу новые автомобили, но что бы не вводить марки авто я решил вставить <SELECT> + к существующему <INPUT>.
Суть сводится к тому что в <SELECT> уже есть какое то количество марок автомобиля, хочу что бы при заполнении <INPUT> значения из <SELECT> удалялись не соответствующие содержанию <INPUT>.

<input name="marks">

<select size="6" id="marks_s">
<option disabled>Выберете марку</option>
...
<option value="BMW">BMW</option>
<option value="AUDI">AUDI</option>
...
</select>
Желательно на чистом Java! Не хочу пока в jquery залезать.
Заранее всем спасибо!

jsnb 08.05.2014 06:48

Цитата:

Сообщение от icehummer (Сообщение 310828)
Желательно на чистом Java!

Месье знает толк в извращениях. Только тогда форумом ошиблись - данный посвящен JavaScript.
Ну а вообще первое что пришло на ум:
<!DOCTYPE HTML>
<html>
  <head>
  <meta charset="utf-8">
  </head>
  <body>
<input name="marks" id="inp">

 <select size="6" id="marks_s">
   <option disabled>Выберете марку</option>
   <option value="BMW">BMW</option>
   <option value="AUDI">AUDI</option>
   <option value="aaa">aaa</option>
   <option value="bbb">bbb</option>
   <option value="SUBARU">SUBARU</option>
 </select>

<script>
var options = document.querySelectorAll('#marks_s>option');
document.getElementById('inp').oninput = function() {
  var select = document.getElementById('marks_s');
  var regExp = new RegExp(this.value, 'i');
  for(var i = 0; i < options.length; i++) {
    if (!regExp.exec(options[i].value)) {
      if ( select.contains(options[i]) ) select.removeChild(options[i]);
    } else {
        select.appendChild(options[i]);
      }
  }
}
</script>
  </body>
</html>

icehummer 08.05.2014 07:05

Спасибо огромное за мобильный ответ!!! То что нужно!

icehummer 08.05.2014 07:11

Вот бы еще здорово с пояснением))

jsnb 08.05.2014 08:15

Чего там пояснять то? Сохраняются option в переменной и при событии input циклом сравниваются их value с регуляркой, созданной на основе значения в инпуте и в зависимости от результата добавляются или убираются из селекта.


Часовой пояс GMT +3, время: 17:20.