[英]Changing options in second drop down menu by user input in first drop down menu
感谢您抽出宝贵的时间查看此内容。
我有两个下拉菜单。 第一个是客户列表,第二个是项目列表。
所有项目都仅绑定到一个客户端,因此我希望代码获得客户端的用户输入,然后读取该值,然后修改PHP代码以仅在与之对应的第二个下拉菜单中打印出值选择的客户。
这是一些代码。 对于第一个下拉菜单:
<div class="item">
<label for='clSel' id='tsClLabel'>Client:</label>
<select name='clSel' id='wClient' onChange="bGroup();">
<option></option>
<?php
$cQuery = "SELECT * FROM Clients ORDER BY Client_Name";
$cResult = mysql_query($cQuery);
while($cData = mysql_fetch_assoc($cResult)) {
echo '<option id="Cid" value="'.$cData['Id'].'">'.$cData['Client_Name'].'</option>';
}
?>
</select>
这是我的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的少量数据?
谢谢!!
整,您可以选择。 一种方法是使用Ajax在获得第一级选择时获取第二级菜单结构,并在成功后填充第二级菜单。 这可能是个问题,因为在发生这种情况时可能会出现某种网络延迟,您无法控制其中的网络延迟(除非您处于封闭环境中)。 因此,从用户的角度来看,可能会带来直觉和呆滞的感觉,尤其是在连接速度缓慢或共享托管解决方案(时间可能相差很大)的情况下。
另一种方法是使用jQuery以某种方式提取所有可能的值并对其进行过滤(以便隐藏不适用的值),也许利用类或某些其他属性作为过滤数据的方法。 使用jQuery,您可以将数据分配给元素,因此您也可以使用它。 如果有大量数据(从您描述的场景中无法分辨出),第二种方法可能效果不佳。 查看您的第二层代码,我看不到WHERE条件,因此我不确定第一层的值如何影响第二层的值,因此很难知道如何使用此方法。
您可以从数据库中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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.