简体   繁体   English

ajax codeigniter 双依赖下拉列表

[英]ajax codeigniter double dependent dropdown

So I have 2 dropdowns and the result will be generated on an input text, yet somehow, if the second dropdown has 2 or more selection, the result it generates end up coming from the last selection.所以我有 2 个下拉列表,结果将在输入文本上生成,但不知何故,如果第二个下拉列表有 2 个或更多选择,它生成的结果最终来自最后一个选择。 Ie if the first dropdown has A and B value, the result will come from B and it won't change though I select A. here's my code HTML即,如果第一个下拉列表有 A 和 B 值,结果将来自 B,即使我选择 A,它也不会改变。这是我的代码 HTML

<div class="form-group">
    <label for="jurusan" class="control-label">Jurusan</label>
    <select name="jurusan" id="jurusan" class="form-control">
        <option selected disabled hidden>--PILIH--</option>
        <?php 
        $query = $this->db->query('SELECT * FROM jurusan');
        $jurusan = $query->result();
        foreach($jurusan as $row) {
        ?>
            <option value="<?php echo $row->id_jurusan ?>"><?php echo $row->nama_jurusan ?></option>
        <?php } ?>
    </select>
    <span id="pilih"></span>
    <span class="help-block"></span>
</div>
<div class="form-group" id="prodi">
    <label for="nama_prodi" class="control-label">Prodi</label>
    <select name="prodi" id="nama_prodi" class="form-control">
    </select>
    <span class="help-block"></span>
</div>
<div class="form-group">
    <label for="add_kode" class="control-label">Kode Mata Kuliah</label>
    <input type="text" name="kode_mata_kuliah" id="add_kode" class="form-control" placeholder="Masukkan Kode Mata Kuliah" required autocomplete="off">
    <span class="help-block"></span>
</div>

and here's my jquery script这是我的 jquery 脚本

$('#jurusan').change(function(){
        var id = $(this).val();
        if(id)
        {
            $.ajax({
                url:'<?=base_url()?>administrator/mata_kuliah/get_data_jurusan',
                method: 'post',
                data: {id_jurusan: id},
                dataType: 'json',
                success: function(response){
                    $('#prodi').show();
                    console.log(response);
                    var output = [];
                    $.each(response,function(index,data)
                    {
                        output.push('<option value="'+data['id_prodi']+'">'+data['nama_prodi']+'</option>');
                        $('#nama_prodi').html(output.join(''));
                        var id = $('#nama_prodi').val();
                        if(id)
                        {
                            $.ajax({
                                url:'<?=base_url()?>administrator/mata_kuliah/get_data',
                                method: 'post',
                                data: {id_prodi: id},
                                dataType: 'json',
                                success: function(response){
                                    $('#add_kode').empty();
                                    $('#add_kode').val((data['kode_prodi']));
                                }
                            })
                        }
                        else
                        {
                            $('#add_kode').empty();
                        }
                    });

                }
            });
        }
        else
        {
            $('#jurusan').empty();
        }
    });
    var id = $('#nama_prodi').val();
    if(id)
    {
        $.ajax({
            url:'<?=base_url()?>administrator/mata_kuliah/get_data',
            method: 'post',
            data: {id_prodi: id},
            dataType: 'json',
            success: function(response){
                $('#add_kode').empty();
                $('#add_kode').val((data['kode_prodi']));
            }
        })
    }
    else
    {
        $('#add_kode').empty();
    }

controller控制器

public function get_data()
    { 
        $post = $this->input->post();
        $data = $this->mata_kuliah->get_data($post);
        echo json_encode($data); 
    }

    public function get_data_jurusan()
    { 
        $post = $this->input->post();
        $data = $this->mata_kuliah->get_data_jurusan($post);
        echo json_encode($data); 
    }

model模型

public function get_data_jurusan($post)
    {
        $this->db->select('*');
        $this->db->where('jurusan', $post['id_jurusan']);
        $query = $this->db->get('prodi');
        $response = $query->result_array();
        return $response;
    }

    public function get_data($post)
    {
        $this->db->select('*');
        $this->db->where('id_prodi', $post['id_prodi']);
        $query = $this->db->get('prodi');
        $response = $query->result_array();
        return $response;
    }

Thanks to Boominathan Elango, I've found the solution I just need to add conditional after the looping if the looping return more than 1 value感谢 Boominathan Elango,我找到了解决方案,如果循环返回超过 1 个值,我只需要在循环后添加条件

$('#jurusan').change(function(){
    var id = $(this).val();
    if(id)
    {
        $.ajax({
            url:'<?=base_url()?>administrator/mata_kuliah/get_data_jurusan',
            method: 'post',
            data: {id_jurusan: id},
            dataType: 'json',
            success: function(response){
                $('#prodi').show();
                var output = [];
                $.each(response,function(index,data)
                {
                    output.push('<option value="'+data['id_prodi']+'">'+data['nama_prodi']+'</option>');
                    $('#nama_prodi').html(output.join(''));
                    // var id = $('#nama_prodi').val();
                    if(Object.keys(response).length < 2)
                    {
                        var id_prodi = $('#nama_prodi').val();
                        if(id_prodi)
                        {
                            $.ajax({
                                url:'<?=base_url()?>administrator/mata_kuliah/get_data',
                                method: 'post',
                                data: {id_prodi: id_prodi},
                                dataType: 'json',
                                success: function(response){
                                    $('#kode').show();
                                    $('#add_kode').empty();
                                    $('#add_kode').val((data['kode_prodi']));
                                }
                            })
                        }
                        else
                        {
                            $('#add_kode').empty();
                        }
                    }
                    else
                    {
                        $('#kode').hide();
                        $('#nama_prodi').append('<option selected disabled hidden>--PILIH--</option>');
                    }
                });
            }
        });
    }
    else
    {
        $('#jurusan').empty();
    }
});
$('#nama_prodi').change(function(){
    var id_prodi = $('#nama_prodi').find(":selected").val();
    if(id_prodi)
    {
        $.ajax({
            url:'<?=base_url()?>administrator/mata_kuliah/get_data',
            method: 'post',
            data: {id_prodi: id_prodi},
            dataType: 'json',
            success: function(data){
                $('#kode').show();
                $('#add_kode').empty();
                $('#add_kode').val((data[0].kode_prodi));
            }
        })
    }
    else
    {
        $('#add_kode').empty();
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM