2013-09-16 84 views
0

感谢您抽出时间看一下。在第一个下拉菜单中通过用户输入更改第二个下拉菜单中的选项

我有两个下拉菜单。第一个是客户列表,第二个是项目列表。

所有项目都绑定到一个客户端,所以我希望代码为客户端获取用户输入,然后读取该值,并修改PHP代码以仅打印第二个下拉列表中的值菜单对应于所选客户端。

这是一些代码。对于第一个下拉菜单:

​​

这里是我的jQuery的功能,从第一个下拉得到了用户选择的值:

  <script> 
      function bGroup(){ 
       val1 = $("#wClient").val(); 
       // window.alert(val1); 
       // $('#div1').html(val1); 
       return val1; 
      } 
     </script> 

而对于第二个下拉菜单代码:

   <label for='billGroupId'>Billing Group: </label> 
       <select name='billGroupId'> 
        <option value=''></option> 
        <?php 
         $sql = "SELECT * FROM Billing_Groups ORDER BY Client_Id, Name"; 
         $sth=$dbh->prepare($sql); 
         $sth->execute(); 
         while ($row = $sth->fetch()) 
         { 
          if ($row['Name']!= ''){ 
           echo "<option value='".$row['Id']."' > ".$row['Name']."</option>"; 
           echo "<script> bGroup(); </script>" 
          } 
         } 
        ?> 
       </select> 

我知道我需要包括WHERE语句在第二个下拉菜单

基本上Select * FROM Clients WHERE Client_ID == $jsVAR

我已经有了var1 JavaScript变量中需要的值。我怎样才能得到这个由PHP读取或通过JS代码发送给PHP的小部分数据?

谢谢!

+1

我想你应该看看'jQuery的ajax' – user1

+0

你不能用php读取javascript变量,除非该变量是作为POST/GET变量传递的。 PHP代码一次在服务器端运行,然后呈现给用户。另一方面,Javascript是客户端,并在呈现给用户之后/之后运行。您所寻找的是在选择客户端后重新加载页面或使用[ajax请求](http://www.w3schools.com/ajax/)在不重新加载页面的情况下处理脚本。 – amaster

回答

0

您可以从数据库中的SELECT所有记录,然后使用json_encode()将它们插入到您的页面HTML中。类似的东西:

<?php 
$sql = "SELECT * FROM Billing_Groups ORDER BY Client_Id, Name"; 
$sth=$dbh->prepare($sql); 
$sth->execute(); 
$projectData = array(); 
while ($row = $sth->fetch()) 
{ 
    if ($row['Name']!= ''){ 
     $projectData[$row['Client_Id']][] = $row; 
    } 
} 
echo '<script type="text/javascript">var projects=', json_encode($projectData), ';</script>'; 
?> 

然后,在你的JS,你使用变量projects作为关联数组(对象),例如:

<script type="text/javascript"> 
for (p in projects[clientId]) { 
    alert(projects[p].Name); 
} 
</script> 
0

Tricky one, 您有选择。一种方法是在获得第一级选择时使用Ajax获取第二级菜单结构,并在成功时填充第二级。这可能是一个问题,因为在发生这种情况时可能会出现某种网络延迟,其中您无法控制(除非您处于封闭环境中)。所以从用户的角度来看,它可能会违反直觉和缓慢的感觉,特别是在时间差异巨大的慢速连接或共享主机解决方案中。

另一种方式是以某种方式把所有可能的值和过滤他们(这样隐藏不适用的那些)使用jQuery,也许使用类或其他一些属性作为过滤数据的方法。使用jQuery,你可以将数据分配给元素,所以你也可以使用它。如果有大量数据(不能从你描述的场景中分辨出来),第二种方法可能不太好。看你的第二级代码,我没有看到一个WHERE条件,所以我不知道如何从第一级值影响第二级的,所以很难知道如何应对,对于这种方法。

相关问题