Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE9即使在选中时也显示选中的项目=“”_Javascript_Jquery_Html_Internet Explorer 9 - Fatal编程技术网

Javascript IE9即使在选中时也显示选中的项目=“”

Javascript IE9即使在选中时也显示选中的项目=“”,javascript,jquery,html,internet-explorer-9,Javascript,Jquery,Html,Internet Explorer 9,我有一系列的下拉列表,让用户从相同的可用选项列表中选择多个项目 每个下拉列表都包含相同的基本列表,但如果选择了某个项目,该选项将不会出现在其他列表中。页面加载时会选择其中一个或多个 可以删除下拉列表。发生这种情况时,所选选项将添加到其他列表中,以便可用 我已经编写了jQuery代码来删除下拉列表,从该选项中删除selected='selected'值,获取以前选择的值,并将其添加到其他列表中。除了IE9之外,它工作正常-它挂起选定的位并重置所有下拉列表,以将先前删除的项作为选定选项 $(".re

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

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

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

我已经编写了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;
});
这是一把小提琴:

此警报用于演示附加到其他列表的值

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


非常感谢您的帮助。

在您的JSFIDLE JS代码的第4行尝试以下内容:

var $liPrev = $ddl.find("option:selected").prop("selected", false);
.prop是您需要设置的,而不是.removeAttr


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

一位同事建议进行此修改,该修改有效:

$(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;
});

没有有效的理由多次使用ID。这是非法的HTML,当你给它添加垃圾时,浏览器可以做任何它想做的事情。我不管你的理由是什么,不要这样做。修复此问题,因为非法html是网页中出现问题的首要原因,因为浏览器在找到它时会做任何它想做的事情。即使您找到了一种方法来实现这一点,也不能保证任何给定浏览器的下一版本不会因为非法标记而关闭并执行更奇怪的操作。@ErikFunkenbusch-虽然您正确地认为这是非法标记,但此注释没有帮助。因为…原因是由我无法控制的东西生成的标记的简写,为了简洁起见,关于这个已经很长的问题,我不讨论各种原因。现在,我想让IE的三个版本都能正常工作。我以后会担心未来的浏览器。@silkster-这没什么区别。属性仍然存在,这将转换为所选项目。虽然属性本身是一个布尔字段,但IE9似乎只是将其存在视为true;