我有2个下拉,我在第一个选择了某个东西之后使用开关来填充第二个。它主要只是一个实验,因为我以前做过的jquery事情似乎很慢。如果有人有更好,更快的方式做到这一点,我会全力以赴。但我仍然希望得到一个答案,因为它现在只是让我感到恼火。
第一个下拉列表onchange="chngprog(this)"
调用此函数
function chngprog(facility)
{
if(facility.id == 'facilityview'){
var select = document.getElementById('programview');
} else {
var select = document.getElementById('program');
}
var testid = facility.value;
switch(testid){
<?php global $__CMS_CONN__;
$sqlqry = "SELECT * FROM facility_db";
$stmt = $__CMS_CONN__->prepare($sqlqry);
$stmt->execute();
$listfacility = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($listfacility as $case)
{
echo "case ".$case['id'].":\n";
echo "select.options = '';";
$boom = explode(";", $case['programs']);
foreach($boom as $program)
{
echo "select.options[select.options.length] = new Option('$program', '$program');\n";
}
echo "break;\n";
}
?>
}
}
php会从数据库创建所有案例,因为有50多个案例,可能无法帮助提高速度因素。
顶部的if语句用于确定它正在查看哪组下拉菜单,因为有2组执行相同的操作,但出于不同的目的。
问题是让开关打到一个案子。我已经发出警报,看看会发生什么,并且所有值都是正确的,但除非指定数字,否则它永远不会出现问题。如果我放switch(20)
它会击中案例20,并将选项添加到第二个下拉菜单中。
那么为什么开关不能评估我输入的变量呢?
答案 0 :(得分:1)
facility.value是字符串吗?尝试
var testid = parseInt(facility.value, 10);
答案 1 :(得分:1)
您的testid可能是一个字符串,您的案例陈述期待整数。
尝试:
switch (parseInt(testid)) {
...
答案 2 :(得分:1)
您可能希望将值设置为',如下所示:
echo "case '" . $case['id'] . "':\n";
如果不这样做,则必须在将变量与任何值进行比较之前将变量转换为int(我还假设id
永远不会返回与数字不同的任何内容)。