救命啊!我有两个下拉列表,其中 comunas 下拉列表取决于 ciudades,它工作完美。当我需要使用保存的数据来修改下拉列表时,问题就出现了。它只会让我带来在城市列表中选择的内容,但在社区中它将无法实现它。
有什么办法可以做到这一点吗?我变得有些困惑。
这是我的代码!
<!-- language: lang-or-tag-here -->
THIS IS THE VIEW CODE
<label>Ciudad:</label><select id="idciudad" name="idciudad" required autocomplete="off">
<option value="0">Seleccione</option>
<?php foreach($listaciudades as $ciudad):?>
<option value="<?= $ciudad['idciudad']?>"
<?php if ($idciudad == $ciudad['idciudad']) : ?> selected<?php endif; ?>
>
<?= $ciudad['nombre']?>
</option>
<?php endforeach; ?>
</select>
<label>Comuna:</label> <select id="idcomuna" name="idcomuna">
<option value="0">Comuna</option>
</select>
<script type="text/javascript">
$(document).ready(function() {
$("#idciudad").change(function() {
$("#idciudad option:selected").each(function() {
idciudad = $('#idciudad').val();
$.post("<?php echo base_url(); ?>index.php/clientes/fillCiudades", {
idciudad : idciudad
}, function(data) {
$("#idcomuna").html(data);
});
});
});
});
</script>
这是 Controller 代码
public function fillCiudades() {
$idciudad = $this->input->post('idciudad');
if($idciudad){
$this->load->model('ClientesModel');
$comuna = $this->ClientesModel->getCiudades($idciudad);
echo '<option value="0">Comunas</option>';
foreach($comuna as $fila){
echo '<option value="'. $fila->idcomuna .'">'. $fila->nombre .'</option>';
}
} else {
echo '<option value="0">Comunas</option>';
}
}
最佳答案
首先,您需要使用保存的 idcomuna 从 Controller 解析变量到 View ,就像处理保存的 idciudad 一样。为此,您必须编辑加载 View 的函数的代码(您没有将其包含在您的问题中)。
类似于(此代码仅供引用):
public function thefunctionthatloadstheview($idcliente) {
// The rest of your code here...
// I supposed you get the client data from database using a model, something like this...
$this->load->model('ClientesModel');
$cliente = $this->ClientesModel->getCliente($idcliente);
$your_view_data = array(
'idciudad' => $cliente->idciudad,
'idcomuna' => $cliente->idcomuna,
// The rest of the data like $listaciudades, etc...
);
$this->load->view('your_view', $your_view_data);
}
像解析 $idciudad 一样解析 $idcomuna 后,您必须在 View 和 fillCiudades 函数中进行另外两项更改。
第二个下拉列表中的项目仅在第一个下拉列表发生更改时加载。要使其在页面加载时加载,请修改 Javascript:
<script type="text/javascript">
// Create a function to make POST request, parsing the value of the first dropdown (ciudades) and the saved value of idcomuna...
function fillCiudades_js() {
$.post("<?php echo base_url(); ?>index.php/clientes/fillCiudades", {
idciudad: $('#idciudad').val(),
idcomuna: <?php echo $idcomuna; ?>
}, function(data) {
$("#idcomuna").html(data);
});
}
$(document).ready(function() {
// Make a request when the page is ready...
fillCiudades_js();
// Make a request while the first dropdown changes...
$("#idciudad").on("change", fillCiudades_js());
});
</script>
然后,修改fillCiudades函数,获取通过Javascript代码解析的idcomuna值:
public function fillCiudades() {
$idciudad = $this->input->post('idciudad');
$idcomuna = $this->input->post('idcomuna');
if ($idciudad) {
$this->load->model('ClientesModel');
$comuna = $this->ClientesModel->getCiudades($idciudad);
echo '<option value="0">Comunas</option>';
foreach ($comuna as $fila) {
echo '<option value="'. $fila->idcomuna .'"' . ($idcomuna == $fila->idcomuna ? 'selected' : '') . '>'. $fila->nombre .'</option>';
}
} else {
echo '<option value="0">Comunas</option>';
}
}
完成这些更改后,第二个下拉列表应加载默认选择的已保存值。
附注我无法测试代码,因此可能存在一些小错误......但我希望它有所帮助!
关于java - 在codeigniter中修改时编辑下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57367971/