dongnachuang6635 2014-10-17 15:53
浏览 18
已采纳

我如何用javascript和php缩短这个过程

I am making a switch cars and their respective models. The data is brought from a database with php. may make more dynamic of like this? (shorter code). Sorry for my bad english.

enter image description here

Selector

<select id="main_list">
    <option value="default" selected>Marca</option>
    <?php

        /* marcas */
        $Alfa_Romeo=39;
        $Chevrolet=33;
        $Chrysler=40;
        $Citroën=42;
        $Dodge=41;
        $Fiat=35;
        /* ... */

        $Registros=array();    
        $Registros=TraerMarcas();

        if (!empty($Registros)) {   
            $cntRegistros=count($Registros);
        }
    ?>

    <?php for ($i=0; $i < $cntRegistros ; $i++) { ?>
        <option value="<?php echo $Registros[$i]['marca'] ?>"><?php echo $Registros[$i]['marca'] ?></option>
    <?php } ?>    
</select>

<select id="brand" disabled > <option value="default" selected>Modelo</option></select>
<select id="version" disabled ><option value="default" selected>Cilindrada</option></select>

JS

$( document ).ready(function() {

    $(function() {

        var sel, i,
            list =  [ <?php for ($i=0; $i < $cntRegistros ; $i++) { echo "'".$Registros[$i]['marca']."',"; } ?> ],
            Fiat =  [ <?php 

                    $Modelo=array();
                    $marca=$Fiat;

                    $Modelo=TraerModelo($marca);

                    if (!empty($Modelo)) {   
                    $cntModelo=count($Modelo);
                    }

                    for ($i=0; $i < $cntModelo ; $i++) { echo "'".$Modelo[$i]['modelo']."',"; }

                    ?> ],

        Chevrolet = [ <?php 

                    $Modelo=array();
                    $marca=$Chevrolet;

                    $Modelo=TraerModelo($marca);

                    if (!empty($Modelo)) {   
                    $cntModelo=count($Modelo);
                    }

                    for ($i=0; $i < $cntModelo ; $i++) { echo "'".$Modelo[$i]['modelo']."',"; }

                    ?> ],

        Ford =      [ <?php 

                    $Modelo=array();
                    $marca=$Ford;

                    $Modelo=TraerModelo($marca);

                    if (!empty($Modelo)) {   
                    $cntModelo=count($Modelo);
                    }

                    for ($i=0; $i < $cntModelo ; $i++) { echo "'".$Modelo[$i]['modelo']."',"; }

                    ?> ],

        Cilindrada = [ '1.2','1.3','1.6','2.0','2.5', ],

        dev_default = '<option value="default" selected>Modelo</option>',
        os_default  = '<option value="default" selected>Cilindrada</option>';

        sel_marca = $('#brand');
        sel_cilin = $('#version');

        $('select').change(function() {
            switch (this.id) {

                case 'main_list':

                    $('.secondary').hide();

                    sel_marca.find('option').remove();
                    sel_marca.append(dev_default);
                    sel_marca.show();

                    $('#brand').removeAttr('disabled');

                        if (this.value == 'Fiat') {
                            for (i = 0; i < Fiat.length; i++) {
                                $("#brand").append(
                                    '<option value="' + Fiat[i] + '">' + Fiat[i] + '</option>'
                                );
                            }
                        } else if (this.value == 'Chevrolet') {
                            for (i = 0; i < Chevrolet.length; i++) {
                                $("#brand").append(
                                    '<option value="' + Chevrolet[i] + '">' + Chevrolet[i] + '</option>'
                                );
                            }
                        } else if (this.value == 'Ford') {
                            for (i = 0; i < Ford.length; i++) {
                                $("#brand").append(
                                    '<option value="' + Ford[i] + '">' + Ford[i] + '</option>'
                            );
                        }
            }

                break;

                case 'brand':

                sel_cilin.find('option').remove();
                sel_cilin.append(os_default);
                sel_cilin.show();

                $('#version').removeAttr('disabled');  

                for (i = 0; i < Cilindrada.length; i++) {
                    $("#version").append(
                        '<option value="' + Cilindrada[i] + '">' + Cilindrada[i] + '</option>'
                    );
                }; 

                break;

            }

        });

    });
})

Note that I have to repeat the process with 18 car brands. I imagined creating a variable selected according to this brand in the 1st selector. Something like:

var sel, i,
    list =  [ <?php for ($i=0; $i < $cntRegistros ; $i++) { echo "'".$Registros[$i]['marca']."',"; } ?> ],
    CarBrand /* this variable changes according to the variable list */ =  [ <?php 

            $Modelo=array();
            $marca=$CarBrand; /* Here the dynamic variable is repeated, calling the database auto brand and bringing selected models that mark */

            $Modelo=TraerModelo($marca);

            if (!empty($Modelo)) {   
            $cntModelo=count($Modelo);
            }

            for ($i=0; $i < $cntModelo ; $i++) { echo "'".$Modelo[$i]['modelo']."',"; }

            ?> ],

Here is the jsFiddle where I relied to create this.

I hope it's not too crazy what I think, and hope they can come to understand my question. Thanks for reading.

  • 写回答

2条回答 默认 最新

  • douniewei6346 2014-10-17 19:52
    关注

    I got this and it works :)

    For brand cars:

    var sel, i,
        list =  [ <?php for ($i=0; $i < $cntRegistros ; $i++) { echo "'".$Registros[$i]['marca']."',"; } ?> ],
    
        /**/
    
        <?php for ($i=0; $i < $cntRegistros ; $i++) { echo $Registros[$i]['marca']; ?> = [ 
    
            <?php 
    
                $Modelo=array();
                $marca=$$Registros[$i]['marca'];
    
                $Modelo=TraerModelo($marca);
    
                if (!empty($Modelo)) {   
                    $cntModelo=count($Modelo);
                };
    
                for ($k=0; $k < $cntModelo ; $k++) { echo "'".$Modelo[$k]['modelo']."',"; } 
            ?> ],
    
        <?php }; ?>
    

    The second selector:

    ('#brand').removeAttr('disabled');
    
        if (this.value == 'Alfa_Romeo') {
            for (i = 0; i < Alfa_Romeo.length; i++) {
                $("#brand").append(
                    '<option value="' + Alfa_Romeo[i] + '">' + Alfa_Romeo[i] + '</option>'
                );
            }
    
        <?php for ($k = 0; $k < $cntRegistros; $k++) { ?>
    
        } else if (this.value == <?php echo "'".$Registros[$k]['marca']."'" ?> ) {
    
            for (i = 0; i < <?php echo $Registros[$k]['marca'] ?>.length; i++) {
                $("#brand").append(
                    '<option value="' + <?php echo $Registros[$k]['marca'] ?>[i] + '">' + <?php echo $Registros[$k]['marca'] ?>[i] + '</option>'
                );
            }
    
        <?php } ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示