在代码点火器中数据库中另一个选择框的更改事件时更改选择框的值

Changing value of selectbox on change event of another select box from database in codeigniter

本文关键字:选择 事件 代码 点火器 数据库 另一个      更新时间:2023-09-26

我有一个视图文件作为

<select name="tournaments" id ="tournaments" class="form-control">
<?php foreach ($tournaments as $tournament): ?>
<option value="<?php echo $tournament->TournamentID ?>"><?php echo $tournament->TournamentName ?></option>
<?php endforeach ?>
</select>

一个脚本

<script type="text/javascript">
    $(document).ready(function(){
        var initial_target_html = '<option value="">Please select a Tournament...</option>'; //Initial prompt for target select
        $('#matches').html(initial_target_html);
        $("#tournaments").change(function(e){
            e.preventDefault();
            var data = ($("#tournaments").val());
            $('#matches').html('<option value="">Loading...</option>');
             $.ajax({
                type:"POST",
                dataType: 'json',
                url:"<?php echo base_url('admin/dashboard/update_match_box') ?>",
                data: {tournament:data},
               success: function(data) {
                }
            });
        });
    });
</script>

控制器功能为

public function update_match_box()
{
    $sql = "Some query"
    $query = $this->db->query($sql);
    $json= $query->result();
    $this->output->set_content_type('application/json')
        ->set_output(json_encode($json));
}

控制器文件将返回多行,我需要在 ajax 的成功事件中捕获这些行并相应地更新第二个选择框,我应该怎么做?

你应该看看form_helper文件,里面有很多有用的函数来构建表单输入,你所要做的就是加载这个助手:在应用程序/配置/自动加载中.php转到"帮助程序"并添加帮助程序名称,如下所示:

$autoload['helper'] = array('form');

接下来,转到您的视图文件并更改以下内容:

<select name="tournaments" id ="tournaments" class="form-control">
<?php foreach ($tournaments as $tournament): ?>
<option value="<?php echo $tournament->TournamentID ?>"><?php echo $tournament->TournamentName ?></option>
<?php endforeach ?>
</select>

对此:

<?php 
// $tournaments must me an array, use ->result_array() instead of ->result_object()
$tournaments = array_column($tournaments, 'TournamentName', 'TournamentID');
echo form_dropdown('tournaments', $tournaments, '', 'id="tournaments" class="form-control") 
?>

对于成功回调函数,您可以使用 $.each 或仅 for 循环来提取每个元素并为选择输入创建选项:

$.ajax({
  type:"POST",
  dataType: 'json',
  url:"<?php echo base_url('admin/dashboard/update_match_box') ?>",
  data: {tournament:data},
  success: function(data) {
    $('select#secondSelect').html('');
    $.each(data, function(item) {
        $("<option />").val(item.id)
                       .text(item.name)
                       .appendTo($('select#secondSelect'));
    });
  }
});