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