4

我正在使用 ajax 调用来更新选择菜单。ajax 调用通过从不同的 .php 文件运行将列表放入我的选择菜单中。

这是 JS 插入片段:

if (req.status == 200) {
        document.getElementById('countydiv').innerHTML=req.responseText;
} else {
        alert("There was a problem while using XMLHTTP:\n" + req.statusText);
}

这是HTML:

    <label for="county">County:</label>
    <div id="countydiv">
        <select name="county">
            <option>Select State First</option>
        </select>
    </div>

很容易。该脚本有效,但仅当其中<div id="countydiv">存在时。

如何将 JavaScript 更改为仍然可以使用看起来像这样的标记?

    <label for="county">County:</label>
    <select name="county">
    <option>Select State First</option>
    </select>

更新:也许我应该包括整个功能:

function getCounty(stateId) {

    var strURL="findCounty.php?state="+stateId;
    var req = getXMLHTTP();

    if (req) {

            req.onreadystatechange = function() {
                    if (req.readyState == 4) {
                            // only if "OK"
                            if (req.status == 200) {
                                    document.getElementById('countydiv').innerHTML=req.responseText;
                            } else {
                                    alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                            }
                    }
            }
            req.open("GET", strURL, true);
            req.send(null);
    }

}

和标记:

    <p>
        <label for="state">State:</label>
        <select name="state" onChange="getCounty(this.value)">
                <option>Select State...</option>
                <option>1</option>
                <option>2</option>
                <option>3</option>
        </select>
</p>

<p>
        <label for="county">County:</label>
        <select name="county">
                <option>Select State First</option>
        </select>
</p>
4

3 回答 3

0

尝试这个:

if (req.status == 200) {
        var selects = document.getElementsByTagName("select");
        for(var i=0;i<selects.length;i++) {
            var s = selects[i];
            if(s.name == "county") {
                var replacement = document.createElement("div");
                replacement.innerHTML = req.responseText;
                s.parentNode.insertBefore(s,replacement);
                s.parentNode.removeNode(s);
                break;
            }
        }
        //document.getElementById('countydiv').innerHTML=req.responseText;
} else {
        alert("There was a problem while using XMLHTTP:\n" + req.statusText);
}
于 2010-02-21T03:54:31.370 回答
0

我建议走 jquery 路线以使自己更轻松:

请参阅此链接以了解应该将您引向正确方向的内容: 如何删除选择框的所有选项,然后添加一个选项并使用 jQuery 选择它?

此外,IE6 中存在一个错误(如果您关心支持它)Select,您应该注意动态填充元素。 http://support.microsoft.com/kb/276228

于 2010-02-21T04:06:57.943 回答
0

没有任何父节点,你必须处理select标签,你不能随心所欲地使用responseText,Json可以帮你填写。

if (req.status == 200) {
    var i = 0;
    var options = document.getElementById("country").options;
    var json = eval("(" + req.responseText + ")");
    for (var key in json) {
        var value = json[key];
        options[i++] = new Option(key, value);
    }
}

<label for="county">County:</label>
<select name="county" id="country"></select>

来自 php 的响应:

{ "USA": 1, "United Kingdom": 2 }
于 2010-02-21T03:15:36.847 回答