IE6没有用jQuery attr调用改变属性(id和name) - 任何建议?

时间:2010-02-04 19:03:48

标签: jquery internet-explorer-6 attr

建议其他倾销IE6即......我无法控制:)

我想要做的快速概要:我有一个带有选择元素的表单。当用户选择select中的特定选项(下面的代码中的id type2)时,我显示包含新选择的div结构。我希望新的div结构及其子代是现有代码的克隆(id pdProgramDiv1),因为我使用php来填充div中的select。一旦克隆了select,我需要更改克隆的id和div的名称及其子标签并选择,因为表单信息将传递给我的提交php脚本。如果它们没有唯一ID,那么虽然它们被序列化为查询字符串,但php中的$ _POST数组只包含给定id的最后一个值。

我已经在Firefox sigh 中包含了绝对完美的代码,并且无法更改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而不是使用对象文字(或map),但没有任何帮助。所有的变化在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();
    }
}); 

2 个答案:

答案 0 :(得分:4)

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

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

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

您正在克隆容器,切换它的ID,然后将其重新插入页面。容器很好,但页面现在有两个元素ID'd#pdProgram1。 document.getElementById不会那样。

重构代码以通过其标记而不是ID来搜索select元素。

答案 1 :(得分:0)

我相信你刚刚遇到了IE6的问题,因为它处理的节点克隆效果很差,如果有的话。它确实无法修复克隆元素的名称和ID ......

更多信息here