IE6不使用jQuery attr调用更改属性(id和名称)-有什么建议吗?

IE6不使用jQuery attr调用更改属性(id和名称)-有什么建议吗?,jquery,internet-explorer-6,attr,Jquery,Internet Explorer 6,Attr,关于倾销IE6的其他建议,即。。。我无法控制:) 我要做的事情的简要说明:我有一个带有select元素的表单。当用户在select(下面代码中的id type2)中选择特定选项时,我将显示一个包含新select的div结构。我希望新的div结构及其子结构是现有结构(id pdProgramDiv1)的克隆,因为我使用php在div中填充select。克隆select后,我需要更改div的克隆id和名称及其子标签并选择,因为表单信息将传递到我的submit php脚本。如果它们没有唯一的id,那么

关于倾销IE6的其他建议,即。。。我无法控制:)

我要做的事情的简要说明:我有一个带有select元素的表单。当用户在select(下面代码中的id type2)中选择特定选项时,我将显示一个包含新select的div结构。我希望新的div结构及其子结构是现有结构(id pdProgramDiv1)的克隆,因为我使用php在div中填充select。克隆select后,我需要更改div的克隆id和名称及其子标签并选择,因为表单信息将传递到我的submit php脚本。如果它们没有唯一的id,那么尽管它们被序列化到查询字符串中,php中的$\u 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中没有乐趣

这是一个已知的问题,还是有人能告诉我进行更改的方法

如果我不能让它工作,我想我将不得不创建所有的元素并隐藏它们,但这似乎不太好

一如既往地提前感谢

更新:已解决

非常感谢那些发现我的错误的人。我想发布最终解决问题的代码。正如我在下面对公认答案的评论中所说的那样,这个修复方案非常有意义。有点尴尬,我没有看到它,但有时需要一双新的眼睛!唯一的变化是选择子select而不是select 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();
    }
}); 

我相信您刚刚遇到了IE6的一个问题,因为它无法处理节点克隆(如果有的话)。它确实无法修复clonned元素的名称和id


更多信息。

我相信您刚刚遇到了IE6的一个问题,因为它无法很好地处理节点克隆(如果有的话)。它确实无法修复clonned元素的名称和id


更多信息。

我想你的问题在这里

$('#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元素。

我想问题就在这里

$('#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元素。

等等,你在说什么?!?IE6中的一个BUG?谢谢你修复了我的代码格式。我还是少了点什么。等等,你在说什么?!?IE6中的一个BUG?谢谢你修复了我的代码格式。我仍然缺少一些东西。所以没有jQuery方法来让它工作?啊。我希望有人会有这样一个“哦,你只需要这样做…”的答案:)我想我唯一的选择是创建它们并隐藏它们。蛮力,但必须这样做。我在链接的网站上没有看到答案。也许我错过了它?所以没有jQuery方法让它工作?啊。我希望有人会有这样一个“哦,你只需要这样做…”的答案:)我想我唯一的选择是创建它们并隐藏它们。蛮力,但必须这样做。我在链接的网站上没有看到答案。也许我错过了?我有点困惑。我认为在克隆调用之后但在appendTo之前调用.attr会在影响Dom之前更改id和名称。当我在firebug中调试时,这就是我所看到的。生成的HTML具有我所期望的所有唯一ID。你是不是因为IE而建议我按标签选择?它会更改div的ID和名称,是的。(但是,呃,div没有名称,所以这不起任何作用。)它不会更改div中的
的ID。只要将其插入文档中,就有两个元素具有一个ID,任何事情都可能发生。您需要更改所有ID,然后才能将其放回文档中。哦,对不起。我想我明白你的意思了。你认为我的第二行找不到select,因为当时有两个。因此,我将$('#pdProgramDiv>select').attr(…)等作为第二行?我试试看。对不起,这是我的iPhone。原谅打字错误,真漂亮!那很好用。非常感谢Bonifield和bobince!这也是有道理的。既然修复对我来说意义重大,我现在想知道为什么我的原始代码在FF中工作?如果可以的话,我将在明天发布工作代码以关闭循环。再次感谢。我有点困惑。我认为在克隆调用之后但在appendTo之前调用.attr会在影响Dom之前更改id和名称。当我在firebug中调试时,这就是我所看到的。生成的HTML具有我所期望的所有唯一ID。你是不是因为IE而建议我按标签选择?它会更改div的ID和名称,是的。(但是,呃,div没有名称,所以这不起任何作用。)它不会更改div中的
的ID。只要将其插入文档中,就有两个元素具有一个ID,任何事情都可能发生。您需要更改所有ID,然后才能将其放回文档中。哦,对不起。我想我明白你的意思了。你认为我的第二行找不到select,因为当时有两个。因此,我将为seco使用$('#pdProgramDiv>select').attr(…)等