建议其他倾倒IE6是...我无法控制:)

快速提出了我要做的事情:我有一个带有精选元素的表格。当用户在选择中选择特定选项(下面的代码中的ID Type2)时,我将显示一个包含新选择的DIV结构。我希望新的DIV结构及其子女成为现有的div结构(ID pdprogramdiv1)的克隆,因为我使用PHP在DIV中填充了选择。克隆选择后,我需要更改Clone的ID和DIV的名称及其子女标签,然后选择,因为表单信息已传递给我的提交PHP脚本。如果它们没有唯一的ID,则将它们序列化到查询字符串中,但PHP中的$ _post数组仅包含给定ID的最后值。

我包括了在Firefox中绝对工作的代码 , ,并且无法更改IE6中的ID和名称。该代码可能不像某些代码那样简洁。我仍然是JQuery的新手。

$('#type2').change(function() {
    if ($('#type2 option:selected').text() == 'Program Director') {
        $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));

        $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});

        $('#pdProgramDiv2 > label').attr('for', 'pdProgram2');
    } else {
        $('#pdProgramDiv2').hide();
    }
}); 

我环顾四周,尝试使用变量而不是链接,以及对attr的单个调用,而不是使用对象字面的(或映射),但没有任何帮助。所有变化在FF中都很好,但在IE6中没有欢乐。

这是一个已知的问题,还是有人告诉我如何实现更改?

如果我无法工作,我想我将必须创建所有元素并隐藏它们,但这似乎不太好。

预先感谢!

更新:已解决

非常感谢那些发现我方式错误的人。我想发布最终解决问题的代码。正如我在下面对公认答案的评论中所说的那样,修复程序是完全合理的。有点尴尬,我没看到它,但是有时需要一双新鲜的眼睛!唯一的更改是选择子选择而不是选择ID,并在DIV上删除名称ATTR分配,因为如前所述,它无能为力。

$('#type2').change(function() {
    if ($('#type2 option:selected').text() == 'Program Director') {
        $('#pdProgramDiv1').clone()
            .attr('id', 'pdProgramDiv2')
            .appendTo($('#type2Div'));

        $('#pdProgramDiv2 > select').attr({
             id: 'pdProgram2', 
             name: 'pdProgram2'});

        $('#pdProgramDiv2 > label').attr('for', 'pdProgram2');
    } else {
        $('#pdProgramDiv2').hide();
    }
}); 
有帮助吗?

解决方案

我认为您的问题在这里...

$('#type2').change(function() {
    /* snip */
        $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));

        $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});
    /* snip */
});

您要克隆容器,切换其ID,然后将其插入页面。容器很好,但是页面现在cotnains两个元素id'd#pdprogram1。 document.getElementById不会那样。

重构代码以通过其标签而不是通过其ID搜索选择元素。

其他提示

我相信您刚刚遇到了IE6的问题,因为它可以使节点克隆(如果有的话)处理不佳。它完全无法修复克隆元素的名称和ID ...

更多信息 这里.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top