【问题标题】:show select checkbox looping from ajax and codeigniter显示从 ajax 和 codeigniter 循环的选择复选框
【发布时间】:2020-11-03 12:58:09
【问题描述】:

我想显示从 db 循环的复选框,如果我尝试在字段中选择数据 id_kendaraan 然后显示来自该 id 的数据。

这是我的视图代码:

<div class="modal fade" id="tambah" tabindex="-1" role="dialog" aria-labelledby="largeModal" aria-hidden="true">
            <div class="modal-dialog">
            <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
                <h3 class="modal-title" id="myModalLabel">Tambah Pemeliharaan</h3>
            </div>
            <form class="form-horizontal" method="post" action="<?php echo base_url()?>Data/Pemeliharaan/Tambah">
                <div class="modal-body">
                    <div class="form-group">
                    <label class="control-label col-xs-3">Nama Kendaraan</label>
                        <div class="col-xs-8">
                            <select class="form-control"  name="id_kendaraan" id="id_kendaraan" required>
                            <option>Pilih Kendaraan</option>
                            <?php
                            if(!empty($kendaraan_)) {
                            foreach ($kendaraan_ as $isi) {
                            ?>
                            <option value="<?php echo $isi['id_kendaraan']?>"><?php echo $isi['nama']?> - <?php echo $isi['platno']?></option>
                            <?php }} ?>
                            </select>
                        </div>
                    </div>
                    <?php
                    $index =0;          
                    foreach ($subkriteria_ as $kr_key => $kriteria) {
                    ?>
                    <div class="form-group">
                        <label class="control-label col-xs-3"><?php echo $kriteria['nama_kriteria'] ?></label> 
                        <div class="col-xs-8">
                                <input type="hidden" name="status_pemeliharaan" value="1" class="form-control">
                                <input type="hidden" name="id_kriteria[]" value="<?php echo $kriteria['id_kriteria'] ?>" class="form-control">  
                            <?php if(!empty($kriteria['sub'])) { ?> 
                            <select class="form-control"  name="isi_kriteria[]" required>
                                <option>Pilih Sub Kriteria</option>
                                <?php $no = 1; foreach ($kriteria['sub'] as $data)     { ?>
                                <option value="<?php echo $data['value'] ?>"><?php echo $data['namasubkriteria'] ?> - <?php echo $data['value'] ?></option>
                                <?php  $no++; } ?>
                            </select>
                            <?php } else if($kriteria['link']=='tahun_beli') { ?>
                                <input name="isi_kriteria[]" value="" class="form-control" type="text" placeholder="Isi Kriteria..." readonly required>
                            <?php } else { ?>
                                <input name="isi_kriteria[]" value="" class="form-control" type="number" placeholder="Isi Kriteria..." required>
                            <?php } ?>
                        </div>
                    </div>
                    <?php } ?>
                    <div class="form-group">
                    <label class="control-label col-xs-3">tes</label>
                        <div class="col-xs-8">
                        <input type="checkbox" name="id_sparepart[]" value=""> //my trouble
                        <input type="text" name="sparepart" value=""> //my trouble
                        </div>
                    </div>
                </div> 
                <div class="modal-footer">
                    <button class="btn" data-dismiss="modal" aria-hidden="true">Tutup</button>
                    <button class="btn btn-info">Submit</button>
                </div>
            </form>
            </div>
            </div>
        </div>


<script type="text/javascript">
$(document).ready(function(){
        $('#id_kendaraan').on('input',function(){
            
        var id_kendaraan=$(this).val();
        $.ajax({
            type : "POST",
            url  : "<?php echo base_url('Data/Pemeliharaan/GetKendaraanById')?>",
            dataType : "JSON",
            data : {id_kendaraan: id_kendaraan},
            cache:false,
            success: function(data){
                $.each(data,function(id_kendaraan, tahun_beli, jenis){
                    $('[name="isi_kriteria[]"]').val(data.tahun_beli);
                    $('[name="id_jenis"]').val(data.id_jenis);
                    $('[name="id_sparepart[]"]').val(data.id_sparepart); //my trouble
                    $('[name="sparepart"]').val(data.sparepart); //my trouble
                        
                });
                    
            }
        });
        return false;
    });
});
</script>

在此代码中,如果我从选择表单中选择一个 kendaran,则数据会根据所选的 kendaraan 显示。 它正在工作,但在复选框上不显示用于从数据库循环的数据备件。

这是我的控制器:

function GetKendaraanById(){
        $id_kendaraan=$this->input->post('id_kendaraan');
        $data=$this->PemeliharaanModel->GetById($id_kendaraan); ;
        echo json_encode($data);
      }

我从视图 $id_kendaraan 获取数据作为我的参数。

这是我的模特:

function GetById($id_kendaraan){
        $this->db->select('*');
        $this->db->from('tb_kendaraan');
        $this->db->join('tb_sparepart', 'tb_sparepart.id_jenis = tb_kendaraan.id_jenis');
        $this->db->where('tb_kendaraan.id_kendaraan',$id_kendaraan);
        $query = $this->db->get();
        if($query->num_rows() > 0)
        {
        foreach ($query->result() as $data) {
                $hasil=array(
                    'tahun_beli' => $data->tahun_beli,
                    'id_jenis' => $data->id_jenis,
                    'id_sparepart' => $data->id_sparepart,
                    'sparepart' => $data->sparepart,
                    );
            }
        }
        return $hasil;
    }

字段 tahun_beli, id jenis 成功显示在视图中。 但备件中的复选框没有循环,只显示一个数据。

选择 nama kendaraan 后,复选框应根据 kendaraan 的类型出现,图像中圈出的数据应出现更多复选框

谢谢你帮助我

【问题讨论】:

    标签: php ajax loops codeigniter checkbox


    【解决方案1】:

    您应该将模型上的查询分开,因为它有不同的显示格式(我假设您希望获得一个 kendaraan 数据和多个 sparepart 数据):

    function GetById($id_kendaraan){
        $this->db->select('*');
        $this->db->from('tb_kendaraan');
        $this->db->where('tb_kendaraan.id_kendaraan',$id_kendaraan);
        $query_kendaraan = $this->db->get();
        
        $hasil = false;
        if($query_kendaraan->num_rows() > 0)
        {
            $data_kendaraan = $query_kendaraan->row();
            $hasil = [
                'tahun_beli' => $data_kendaraan->tahun_beli,
                'id_jenis' => $data_kendaraan->id_jenis,
                'spareparts' => [] // empty array, to be filled with spareparts data
            ];
            $this->db->select('*');
            $this->db->from('tb_sparepart');
            $this->db->where('tb_sparepart.id_jenis', $data_kendaraan->id_jenis);
            $query_sparepart = $this->db->get();
            
            foreach ($query_sparepart->result() as $data_sparepart) {
                $spareparts = [
                    'id_sparepart' => $data_sparepart->id_sparepart,
                    'sparepart' => $data_sparepart->sparepart,
                ];
                array_push($hasil['spareparts'], $spareparts);
            }
        }
        return $hasil;
    }
    

    然后在html端,尝试修改如下代码:

    <div class="modal fade" id="tambah" tabindex="-1" role="dialog" aria-labelledby="largeModal" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
                    <h3 class="modal-title" id="myModalLabel">Tambah Pemeliharaan</h3>
                </div>
                <form class="form-horizontal" method="post" action="<?php echo base_url()?>Data/Pemeliharaan/Tambah">
                    <div class="modal-body">
                        <div class="form-group">
                        <label class="control-label col-xs-3">Nama Kendaraan</label>
                            <div class="col-xs-8">
                                <select class="form-control"  name="id_kendaraan" id="id_kendaraan" required>
                                <option>Pilih Kendaraan</option>
                                <?php
                                if(!empty($kendaraan_)) {
                                foreach ($kendaraan_ as $isi) {
                                ?>
                                <option value="<?php echo $isi['id_kendaraan']?>"><?php echo $isi['nama']?> - <?php echo $isi['platno']?></option>
                                <?php }} ?>
                                </select>
                            </div>
                        </div>
                        <?php
                        $index =0;          
                        foreach ($subkriteria_ as $kr_key => $kriteria) {
                        ?>
                        <div class="form-group">
                            <label class="control-label col-xs-3"><?php echo $kriteria['nama_kriteria'] ?></label> 
                            <div class="col-xs-8">
                                    <input type="hidden" name="status_pemeliharaan" value="1" class="form-control">
                                    <input type="hidden" name="id_kriteria[]" value="<?php echo $kriteria['id_kriteria'] ?>" class="form-control">  
                                <?php if(!empty($kriteria['sub'])) { ?> 
                                <select class="form-control"  name="isi_kriteria[]" required>
                                    <option>Pilih Sub Kriteria</option>
                                    <?php $no = 1; foreach ($kriteria['sub'] as $data)     { ?>
                                    <option value="<?php echo $data['value'] ?>"><?php echo $data['namasubkriteria'] ?> - <?php echo $data['value'] ?></option>
                                    <?php  $no++; } ?>
                                </select>
                                <?php } else if($kriteria['link']=='tahun_beli') { ?>
                                    <input name="isi_kriteria[]" value="" class="form-control" type="text" placeholder="Isi Kriteria..." readonly required>
                                <?php } else { ?>
                                    <input name="isi_kriteria[]" value="" class="form-control" type="number" placeholder="Isi Kriteria..." required>
                                <?php } ?>
                            </div>
                        </div>
                        <?php } ?>
                        <div class="form-group">
                            <label class="control-label col-xs-3">tes</label>
                            <div class="col-xs-8">
                                <ul id="sparepartList" style="list-style-type: none; padding: 0;"></ul>
                            </div>
                        </div>
                    </div> 
                    <div class="modal-footer">
                        <button class="btn" data-dismiss="modal" aria-hidden="true">Tutup</button>
                        <button class="btn btn-info">Submit</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
    
    
    <script type="text/javascript">
        $(document).ready(function(){
            $('#id_kendaraan').on('input',function(){
                
                var id_kendaraan=$(this).val();
                $.ajax({
                    type : "POST",
                    url  : "<?php echo base_url('Data/Pemeliharaan/GetKendaraanById')?>",
                    dataType : "JSON",
                    data : {id_kendaraan: id_kendaraan},
                    cache:false,
                    success: function(data){
                        $('#sparepartList').empty(); // clear all sparepart checkboxes
                        $.each(data, function(id_kendaraan, tahun_beli, jenis){
                            $('[name="isi_kriteria[]"]').val(data.tahun_beli);
                            $('[name="id_jenis"]').val(data.id_jenis);
                        });
                        $.each(data.spareparts, function (key, value) {
                            let li = $('<li><input type="checkbox" name="id_sparepart[]" value="' + value.id_sparepart + '" />' +
                                    '<input type="text" name="sparepart" value="' + value.sparepart + '" /></li>');
                            $('#sparepartList').append(li);
                        });
                            
                    }
                });
                return false;
            });
        });
    </script>
    

    请注意,我将 sparepart html 输入更改为无序列表元素,然后循环从其中的 ajax 响应中检索到的 sparepart 数据。

    【讨论】:

    • 我在邮递员中尝试了这段代码,结果是 { "tahun_beli": "2008", "id_jenis": "4", "spareparts": [ { "id_sparepart": "8", "sparepart ": "roda gede sekali" } ] } ,但在视图中备用部件显示循环 3x 显示复选框.. 应该是 1 个复选框
    • i.stack.imgur.com/aTzUt.png 在备件处循环
    • 你是对的,第二个sparepart 循环也应该与kendaraan 循环分开,我已经更新了我的代码。
    【解决方案2】:

    在你的模型中

        $hasil=array(
                    'tahun_beli' => $data->tahun_beli,
                    'id_jenis' => $data->id_jenis,
                    'id_sparepart' => $data->id_sparepart,
                    'sparepart' => $data->sparepart,
                    );
    

    你应该使用 [] 将数据存储在 $hasil 中

       $hasil[]=array(
                    'tahun_beli' => $data->tahun_beli,
                    'id_jenis' => $data->id_jenis,
                    'id_sparepart' => $data->id_sparepart,
                    'sparepart' => $data->sparepart,
                    );
    

    【讨论】:

    • 不起作用兄弟,如果我尝试选择 kendaraan,我的数据会显示,但备件复选框仅显示 1 个数据,备件数据应该显示更多数据,因为在我的数据库中备件更多...我的问题是在 ajax 中循环并在字段复选框处循环
    猜你喜欢
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2013-06-23
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多