Поместите ввод внутрь выберите

#html #codeigniter #bootstrap-4

Вопрос:

Есть ли способ разместить поле ввода внутри select?

 <select name="menu_files" class="form-control" >
    <option value="new_menu"> <input type="text"></option>
</select>
 

Комментарии:

1. Внутри тега опции может содержаться только текст, без html. Вам придется создать собственное решение.

2. Тег опции принимает только текст, а не другие HTML-элементы. Вы не можете вставить поле ввода в раскрывающееся меню «Выбор».

3. Будете ли вы отправлять эту форму с помощью ajax? Если это так, вы можете получить визуальный результат выпадающего списка с полем ввода с помощью Javascript

Ответ №1:

<datalist> Элемент

Этот datalist элемент предназначен для обеспечения лучшего механизма для этой концепции.

 <input type="text" name="example" list="exampleList">
<datalist id="exampleList">
  <option value="A">  
  <option value="B">
</datalist> 

Для получения дополнительной информации см.

Ответ №2:

Невозможно разместить поле ввода внутри select. Вы можете создать свой собственный плагин с помощью jquery. Попробуйте выполнить следующий код:

 $(document).ready(function() {
  $('.dropdown-menu input').click(function(e) {
    e.stopPropagation();
  });

  $('.dropdown a').click(function() {
    $('.dropdown').addClass("open");
  });
  $('.dropdown-menu li').click(function() {

    $('.dropdown-toggle b').remove().appendTo($('.dropdown-toggle').text($(this).text()));
  });
}); 
 .nav {
  margin-left: 0;
  margin-bottom: 20px;
  list-style: none;
}

ul,
ol {
  padding: 0;
  margin: 0 0 10px 25px;
}

.dropup,
.dropdown {
  position: relative;
}

.open>.dropdown-menu {
  display: block;
}

.nav>li>a {
  display: block;
}

.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  background-color: #ffffff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  -webkit-border-radius: 6px;
  -moz-border-radius: 6px;
  border-radius: 6px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  -webkit-background-clip: padding-box;
  -moz-background-clip: padding;
  background-clip: padding-box;
}

.dropdown-menu .divider {
  height: 1px;
  margin: 9px 1px;
  overflow: hidden;
  background-color: #e5e5e5;
  border-bottom: 1px solid #ffffff;
}

.dropdown-menu>li>a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 20px;
  color: #333333;
  white-space: nowrap;
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="nav" role="navigation">
  <li class="dropdown"> <a href="#" id="drop2" role="button" class="dropdown-toggle" data-toggle="dropdown">--Select Country--<b class="caret"></b></a>

    <ul class="dropdown-menu" role="menu" aria-labelledby="drop2">
      <li role="presentation"><a role="menuitem" tabindex="-1" href="#">USA</a>

      </li>
      <li role="presentation" class="divider"></li>
      <li role="presentation"><a role="menuitem" tabindex="-1" href="#">UK</a>

      </li>
      <li role="presentation" class="divider"></li>
      <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Russia</a>

      </li>
      <li role="presentation" class="divider"></li>
      <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Others <input type="text" id="other"/></a>

      </li>
    </ul>
  </li>
</ul> 

Ответ №3:

Вы можете сделать что-то вроде этого:

Ссылка для: JsFiddle

HTML:

 <input type="text" name='text'>
<br>
<br>
<select name="menu_files" class="form-control" >
    <option id='text1'> Text 1</option>
    <option id="text2"> Text 2</option>
</select>

<p></p>
 

JS:

 $(document).ready(function(){

  $( "input" ).keyup(function() {
    var value = $( this ).val();
    $( "p" ).text( value );
    $('#text1').text(value);
  })
  .keyup();
})
 

Ответ №4:

Мы можем добиться этого, поместив входной тег «рядом», а не «внутри» тега select, но поместив их в ограниченную и фиксированную область, такую как таблица td.

 function selection(){
	var selected=document.getElementById("select1").value;
  if(selected==0){
  	document.getElementById("input1").removeAttribute("hidden");
  }else{
  	//elsewhere actions
  }
} 
 td{
  width: 170px;
  max-width: 170px;
  overflow: hidden;
  white-space: nowrap;
}

input{
  width: 164px;
} 
 <table>
  <tr>
      <td>
        <input id="input1" hidden="hidden" placeholder="input data">
        <select onchange="selection()" id="select1">
          <option value="-1"></option>
          <option value="0">-make your own choice-</option>
          <option value="1">choice 1</option>
          <option value="2">choice 2</option>
        </select>
      </td>
  </tr>
</table> 

jsfiddle