IE9 显示所选项目,即使选择=“”

IE9 displaying selected items even when selected=""

本文关键字:选择 显示 选项 项目 IE9      更新时间:2023-09-26

我有一系列下拉列表,允许用户从相同的可用选项列表中选择多个项目。

每个下拉列表都包含相同的基本列表,但如果选择了某个项目,则该选项将不会显示在其他列表中。页面加载时选中了其中一个或多个。

可以删除下拉列表。发生这种情况时,所选选项将添加到其他列表中,以便其可用。

我已经编写了jQuery代码来删除下拉列表,从该选项中删除"selected = 'selected'"值,获取先前选择的值,并将其添加到其他列表中。除了IE9之外,一切正常 - 它挂在"选定"位上并重置所有下拉列表以将先前删除的项目作为选定选项。

$(".removestccode").click(function () {
    var $ddl = $(this).parents(".stcCodeLi").find("#ddlSTCCode");
    $ddl = $(this).prev();
    var $liPrev = $ddl.find("option:selected").removeAttr("selected");
    alert($liPrev[0].outerHTML);
    var ddls = $('.ddlSTCCode').not($ddl);
    for (var i = 0; i < ddls.length; i++) {
        var d = ddls[i];
        $(d).append($liPrev[0].outerHTML);
        //$(d).find("option").tsort();
    }
    if ($("#ulSTCCodes li").length > 1) {
        $(this).parents(".stcCodeLi").remove();
    }
    return false;
});

这里有一个小提琴:https://jsfiddle.net/wicker95/g2mdqg4v/

警报用于演示追加到其他列表的值。

我知道有几个id在标签上被多次使用,因为......原因。

任何帮助,不胜感激。

一位同事提出了这个修改,它有效:

$(d).append($liPrev[0].outerHTML.replace('selected=""', ''));

在上下文中:

$(".removestccode").click(function () {
    var $ddl = $(this).parents(".stcCodeLi").find(".ddlSTCCode");
    $ddl = $(this).prev();
    var $liPrev = $ddl.find("option:selected").removeAttr("selected");
    var ddls = $('.ddlSTCCode').not($ddl);
    for (var i = 0; i < ddls.length; i++) {
        var d = ddls[i];
        $(d).append($liPrev[0].outerHTML.replace('selected=""', ''));
        //$(d).append($liPrev[0].outerHTML);
        //$(d).find("option").tsort();
    }
    if ($("#ulSTCCodes li").length > 1) {
        $(this).parents(".stcCodeLi").remove();
    }
    return false;
});

在 jsfiddle JS 代码的第 4 行试试这个:

var $liPrev = $ddl.find("option:selected").prop("selected", false);

.prop()是您需要设置的内容,而不是.removeAttr()

您还可以执行.attr('selected', null)以删除属性