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

时间:2014-10-17 15:53:03

标签: javascript php jquery

我正在制作开关车及其各自的型号。数据来自带有php的数据库。可能会更像这样的动态吗? (较短的代码)。抱歉我的英语不好。

enter image description here

选择

<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;

            }

        });

    });
})

请注意,我必须重复18个汽车品牌的流程。 我想象在第一选择器中创建根据该品牌选择的变量。类似的东西:

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']."',"; }

            ?> ],

以下是我依靠创建此内容的jsFiddle

我希望我的想法不会太疯狂,并希望他们能够理解我的问题。谢谢你的阅读。

2 个答案:

答案 0 :(得分:0)

1)使用PHP's foreach()而不是浪费3行代码获取计数,在计数上执行for()循环...等等

2)查看代码,确定哪些内容看起来完全相同(品牌/型号除外),并为每个块创建函数(PHP functions和/或Javascript functions)。然后将您的品牌/型号传递给该功能,瞧 - 您正在构建DRY code

我认为除此之外的任何事情都只是为您编写代码。我希望它有助于引导你走向正确的方向

答案 1 :(得分:0)

我得到了这个并且它有效:)

对于品牌汽车:

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 }; ?>

第二个选择器:

('#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 } ?>