使用 JavaScript 动态加载多个 select 框
Dynamically loading multiple select box using JavaScript
在我的 CodeIgniter 视图页面中,我想显示一个可搜索的 select 框。我可以使用添加按钮操作任意数量的可搜索 select 框的副本。 ajax 调用填充的可搜索 select 框数据。这是我的要求,我在下面添加图片以阐明我的问题。
我在下面提供我的 CodeIgniter 控制器函数,它处理 ajax 请求:
public function ajax_load()
{
if ($this->input->is_ajax_request())
{
$labtests = $this->Laboratory_service_model->getLabTests(); //gets result_array()
if (!empty($labtests))
{
$data['return'] = true;
$data['a'] = $labtests;
echo json_encode($data);
}
else
{
$data['return'] = false;
$data['message'] = 'cant get data from table';
echo json_encode($data);
}
}
else
{
$data['return'] = false;
$data['message'] = 'Ajax request not getting';
echo json_encode($data);
}
}
我的 JavaScript 文件在这里提供:
$.ajax({
type: 'POST',
url: surl + 'LabServices/ajax_load',
success: function (data)
{
var ndata = JSON.parse(data);
if (ndata.return == true)
{
var myOptions = ndata.a;
var mySelect = $('#mySelect');
myOptions.forEach(function(data)
{
mySelect.append(
$('<option></option>').val(data.id).html(data.name)
);
});
}
else if (ndata.return == false)
{
$('.error').text(ndata.message);
}
else
{
$('.error').text('something went wrong');
}
},
error: function ()
{
$('.error').text('something went wrong');
}
});
我已经使用 ajax 从控制器获取数据并在 CodeIgniter 中的 select2 库的帮助下创建了一个可搜索的 select 框。但是我不知道如何动态操作带有按钮的select框。请给我一个解决方案的朋友..
我的查看页面部分是:
<a class="col-md-6 mb-3 htmlitems">
<label>Lab Tests</label>
<div class="form-control ">
<select id="mySelect" class="" style="width: 100%;" name="tests">
</select>
</div>
<a id="" class="btn btn-danger add_spec"> + </a>
</div>
提前致谢
信义
因为您的 select 选项将相同,所以单击 add_spec
而不是调用 ajax 再次检索选项,您可以只 clone
已添加的选项 select,然后将此 cloned
添加到您的 html 中。然后,使用 find('select:last').select2();
.
初始化它
演示代码 :
$("#mySelect").select2();
$(".add_spec").click(function() {
var options = $(".htmlitems:first").find("[name=tests]").clone(); //get select and clone it
//generate html and add options inside select
var result = '<div class="col-md-6 mb-3 htmlitems"><label>Lab Tests</label><div class="form-control "><select class="new_added" style="width: 100%;" name="tests">' + $(options).html() + '</select><button class="remove">-</button></div>'
$(result).appendTo("#result") //add generated htmls
$('#result').find('select:last').select2(); //initialize it
});
//on click of remove
$(document).on("click", ".remove", function() {
$(this).closest(".htmlitems").remove() //get closest div remove it
})
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/css/select2.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/js/select2.min.js"></script>
<div id="result">
<div class="col-md-6 mb-3 htmlitems">
<label>Lab Tests</label>
<div class="form-control ">
<select id="mySelect" class="" style="width: 100%;" name="tests">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</div>
<a id="" class="btn btn-danger add_spec"> + </a>
</div>
</div>
在我的 CodeIgniter 视图页面中,我想显示一个可搜索的 select 框。我可以使用添加按钮操作任意数量的可搜索 select 框的副本。 ajax 调用填充的可搜索 select 框数据。这是我的要求,我在下面添加图片以阐明我的问题。
我在下面提供我的 CodeIgniter 控制器函数,它处理 ajax 请求:
public function ajax_load()
{
if ($this->input->is_ajax_request())
{
$labtests = $this->Laboratory_service_model->getLabTests(); //gets result_array()
if (!empty($labtests))
{
$data['return'] = true;
$data['a'] = $labtests;
echo json_encode($data);
}
else
{
$data['return'] = false;
$data['message'] = 'cant get data from table';
echo json_encode($data);
}
}
else
{
$data['return'] = false;
$data['message'] = 'Ajax request not getting';
echo json_encode($data);
}
}
我的 JavaScript 文件在这里提供:
$.ajax({
type: 'POST',
url: surl + 'LabServices/ajax_load',
success: function (data)
{
var ndata = JSON.parse(data);
if (ndata.return == true)
{
var myOptions = ndata.a;
var mySelect = $('#mySelect');
myOptions.forEach(function(data)
{
mySelect.append(
$('<option></option>').val(data.id).html(data.name)
);
});
}
else if (ndata.return == false)
{
$('.error').text(ndata.message);
}
else
{
$('.error').text('something went wrong');
}
},
error: function ()
{
$('.error').text('something went wrong');
}
});
我已经使用 ajax 从控制器获取数据并在 CodeIgniter 中的 select2 库的帮助下创建了一个可搜索的 select 框。但是我不知道如何动态操作带有按钮的select框。请给我一个解决方案的朋友..
我的查看页面部分是:
<a class="col-md-6 mb-3 htmlitems">
<label>Lab Tests</label>
<div class="form-control ">
<select id="mySelect" class="" style="width: 100%;" name="tests">
</select>
</div>
<a id="" class="btn btn-danger add_spec"> + </a>
</div>
提前致谢 信义
因为您的 select 选项将相同,所以单击 add_spec
而不是调用 ajax 再次检索选项,您可以只 clone
已添加的选项 select,然后将此 cloned
添加到您的 html 中。然后,使用 find('select:last').select2();
.
演示代码 :
$("#mySelect").select2();
$(".add_spec").click(function() {
var options = $(".htmlitems:first").find("[name=tests]").clone(); //get select and clone it
//generate html and add options inside select
var result = '<div class="col-md-6 mb-3 htmlitems"><label>Lab Tests</label><div class="form-control "><select class="new_added" style="width: 100%;" name="tests">' + $(options).html() + '</select><button class="remove">-</button></div>'
$(result).appendTo("#result") //add generated htmls
$('#result').find('select:last').select2(); //initialize it
});
//on click of remove
$(document).on("click", ".remove", function() {
$(this).closest(".htmlitems").remove() //get closest div remove it
})
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/css/select2.min.css">
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/js/select2.min.js"></script>
<div id="result">
<div class="col-md-6 mb-3 htmlitems">
<label>Lab Tests</label>
<div class="form-control ">
<select id="mySelect" class="" style="width: 100%;" name="tests">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</div>
<a id="" class="btn btn-danger add_spec"> + </a>
</div>
</div>