繁体   English   中英

JavaScript导致选择输入卡住

[英]Javascript causes select input to get stuck

我有一个JavaScript函数,可以根据类别和子类别系统刷新选择中包含的选项。 这些选择是由php函数根据mssql数据库的内容生成的。

为了查询类别的层次结构,我已经使用php将信息存储到二维数组中,然后使用json_encode将此数组传递给JavaScript。

我的功能按预期运行,但是当用户希望更改选择中的值时,他们将无法执行! 他们只能看到可用选项,而不能选择一个。

这是我的JavaScript函数:

function refresh_values() {
    //the dropdown_array is my array conatining the heirarchy information

    var options = "<option value=\"Tous\">Tous</option>"; //default "All" choice
    var dup_array = new Array();                          //to prevent doubles

    if (document.getElementById('bloc').value != 'Tous') {

        for (var i = 0; i <dropdown_array.length; i++) {
            if (dropdown_array[i][0] == document.getElementById('bloc').value && !(dropdown_array[i][2] == null) && !(contains(dup_array, dropdown_array[i][2]))) {
                dup_array.push(dropdown_array[i][2]);
                options += "<option value=\"" + dropdown_array[i][2] + "\">" + dropdown_array[i][2] + "</option>";
            }
        }
    }else {
        for (var i = 0; i <dropdown_array.length; i++) {
            if (!contains(dup_array, dropdown_array[i][2])) {
                dup_array.push(dropdown_array[i][2]);
                options += "<option value=\"" + dropdown_array[i][2] + "\">" + dropdown_array[i][2] + "</option>";
            }
        }
    }
    document.getElementById('processus').innerHTML = options;

    if (document.getElementById('processus').value != 'Tous') {

        for (var i = 0; i <dropdown_array.length; i++) {
            if (dropdown_array[i][2] == document.getElementById('activite').value && !(dropdown_array[i][4] == null) && (!contains(dup_array, dropdown_array[i][4]))) {
                dup_array.push(dropdown_array[i][4]);
                options += "<option value=\"" + dropdown_array[i][4] + "\">" + dropdown_array[i][4] + "</option>";
            }
        }
    }else {
        for (var i = 0; i <dropdown_array.length; i++) {
            if (!contains(dup_array, dropdown_array[i][4])) {
                dup_array.push(dropdown_array[i][4]);
                options += "<option value=\"" + dropdown_array[i][4] + "\">" + dropdown_array[i][4] + "</option>";
            }
        }        
    }
    document.getElementById('activite').innerHTML = options;
}

这是我的“包含”功能:

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}

这是“构建”所选内容的html / php

<!--The script after each input is to preserve it's value after the form is submitted
I've already identified this as being irrelevant to my problem via testing-->

<form id="search" method="GET">
    <span class="form_label">Numero: </span>
    <input type="text" name="numero" value="<?php echo isset($_GET['numero']) ? $_GET['numero'] : '' ?>"/>
    <br>

    <span class="form_label">Bloc processus: </span>
    <?php echo generate_dropdown("table_name", "nom_bloc_francais", "bloc");?>

    <script type="text/javascript">
        document.getElementById('bloc').value = "<?php echo $_GET['bloc'];?>";
    </script>
    <br>

    <span class="form_label">Processus: </span>
    <?php echo generate_dropdown("table_name", "nom_processus_francais", "processus");?>

    <script type="text/javascript">
        document.getElementById('processus').value = "<?php echo $_GET['processus'];?>";
    </script>
    <br>

    <span class="form_label">Activite: </span>
    <?php echo generate_dropdown("table_name", "nom_activite_francais", "activite");?>

    <script type="text/javascript">
        document.getElementById('activite').value = "<?php echo $_GET['activite'];?>";
    </script>
    <input type="submit" value="Search!"/>
</form>

这是最初生成选择的php函数:

function generate_dropdown($table, $field, $name) {
        $options = "<option value=\"Tous\">Tous</option>";
        $query = "SELECT DISTINCT " . $field . " FROM " . $table. " ";

        $filter=mssql_query($query);
        while($row = mssql_fetch_array($filter)) {
            $options .= "<option value=\"". $row[$field] . "\">" . $row[$field] . "</option>";
        }

        $menu='
            <select name="' . $name . '" class="filter" id="' . $name . '" onchange="refresh_values()">
              ' . $options . '
            </select>';

        return $menu;
}

关于用户为什么不能从“ Tous”更改选择的值的原因,有人至少可以向我指出正确的方向吗?

更多信息:当我删除JavaScript函数时,可以更改选择的值。

谢谢

设置innerHTML属性不是构建Select控件的好方法。 尝试在生成innerHTML的循环内动态构建控件。

var drpDown= document.getElementById('activite');
var newOp = document.createElement("option");
newOp.text = "Txt";
newOp.value = "1";
drpDown.options.add(newOp);

我知道了。 经过广泛的调试后,我意识到每次我更改选择值时都会调用此函数。 这意味着无论我选择更改什么选择,它都会重新生成。 因此,当我更改它时,将重新构建选择并将值设置回默认值。

解决方法是简单地向函数添加参数以定义要更改的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM