Переключатель JavaScript не принимает переданную переменную - PullRequest
0 голосов
/ 15 марта 2011

У меня есть 2 выпадающих списка, и я использую переключатель, чтобы заполнить второе после того, как что-то было выбрано в первом.В основном это всего лишь эксперимент, потому что то, что я делал раньше, казалось очень медленным.Если у кого-то есть более быстрый и быстрый способ сделать это, я весь в ушах.Но я все еще хочу получить ответ на этот вопрос, потому что это меня сейчас просто раздражает.

Первые выпадающие списки 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 ]

1 голос
/ 15 марта 2011

Ваш testid, вероятно, является строкой, и ваши операторы case ожидают целые числа.

Попытка:

switch (parseInt(testid)) {
    ...
1 голос
/ 16 марта 2011

Вы можете поместить свои значения между ', например так:

echo "case '" . $case['id'] . "':\n";

Если вы этого не сделаете, вам придется преобразовать переменную в int перед сравнением с любым значением (я также полагаю, что id никогда не вернет ничего, кроме числа).

1 голос
/ 15 марта 2011

Значение параметра object.value? Попробуйте

var testid = parseInt(facility.value, 10);
...