2014-10-17 42 views
0

我正在开关汽车和他们各自的模型。数据是从php数据库中提取的。可能会使这样更有活力? (较短的代码)。对不起,我的英语不好。如何使用JavaScript和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

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

回答

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 } ?> 
+0

@Dave,你对此有何看法?该foreach不明白它是如何工作的哈哈 – nicogaldo 2014-10-17 19:53:46

0

1)使用PHP's foreach()而不是浪费的代码行3+获取计数时,做了关于计数()循环...等

2)在看你的代码,确定哪些事情看起来相同(品牌/型号除外),并为每个组块创建功能(PHP functions和/或Javascript functions)。然后,只需将您的品牌/型号传递给该功能,并且瞧 - 您正在建立DRY code

我觉得除此之外,任何事情都只会为你写代码。我希望它有助于引导你在正确的方向

+0

了解你的答案的逻辑,但我不知道如何应用它。最近我在JavaScript中介绍。 – nicogaldo 2014-10-17 16:27:07

+0

我明白我想写你的代码,但不幸的是,StackOverflow不是那个地方。根据这些信息尝试一下,如果你在任何特定地点挂断电话,请发表另一个问题。 – Dave 2014-10-17 16:33:30

+0

也就是说,我不是想为我做所有的工作。我看到你不能在php代码中使用JavaScript变量。我会继续调查,感谢您的帮助。 – nicogaldo 2014-10-17 18:12:48