Javascript开关没有通过变量

时间:2011-03-15 20:55:22

标签: php javascript switch-statement

我有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,并将选项添加到第二个下拉菜单中。

那么为什么开关不能评估我输入的变量呢?

3 个答案:

答案 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永远不会返回与数字不同的任何内容)。