使用JQuery清除下拉列表


75

我写了这个小功能,用来自服务器的数据填充下拉列表。

function fillDropDown(url, dropdown) {
    $.ajax({
        url: url,
        dataType: "json"
    }).done(function (data) {
        // Clear drop down list
        $(dropdown).find("option").remove(); <<<<<< Issue here
        // Fill drop down list with new data
        $(data).each(function () {
            // Create option
            var $option = $("<option />");
            // Add value and text to option
            $option.attr("value", this.value).text(this.text);
            // Add option to drop down list
            $(dropdown).append($option);
        });
    });
}

然后,我可以用这种方式调用该函数:

fillDropDown("/someurl/getdata", $("#dropdownbox1"))

除了我要从下拉列表中清除旧数据的那一行外,其他所有东西都运行正常。我究竟做错了什么?

任何可能有助于改进此代码的技巧也受到高度赞赏。

Answers:


202

只需使用.empty()

// snip...
}).done(function (data) {
    // Clear drop down list
    $(dropdown).empty(); // <<<<<< No more issue here
    // Fill drop down list with new data
    $(data).each(function () {
        // snip...

还有一种更简洁的方法来建立选项:

// snip...
$(data).each(function () {
    $("<option />", {
        val: this.value,
        text: this.text
    }).appendTo(dropdown);
});

1
顺便说一句,这只要做一点重构就可以作为jQuery插件很好用。
Matt Ball

1
对我来说,数据不是DOM列表,而是JavaScript数组,所以$(data).each(function () ...->$.each(data, function()..
AaronLS 2014年

我不得不大写,Value并且Text
Rafael

21

我都尝试.empty(),以及.remove()对我的下拉和两个很慢。因为我在那里有近4,000种选择。

我用.html("")它在我的情况下要快得多。
在下面

  $(dropdown).html("");

11
对于用户可操作的网页,4000个选项可能太多。许多浏览器甚至在渲染时都会遇到问题。考虑分页列表或自动完成/建议。
StingyJack

2
<select id="ddlvalue" name="ddlvaluename">
<option value='0' disabled selected>Select Value</option>
<option value='1' >Value 1</option>
<option value='2' >Value 2</option>
</select>

<input type="submit" id="btn_submit" value="click me"/>



<script>
$('#btn_submit').on('click',function(){
      $('#ddlvalue').val(0);
});
</script>

0

如何将新存储在optionsvariable,然后.html(variable)用于替换中的数据container呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.