0

除了转储 IE6 之外的其他建议......我无法控制 :)

我正在尝试做的快速概要:我有一个带有选择元素的表单。当用户在选择中选择特定选项(下面代码中的 id type2)时,我会显示一个包含新选择的 div 结构。我希望新的 div 结构及其子结构是现有结构 (id pdProgramDiv1) 的克隆,因为我使用 php 填充 div 中的选择。克隆选择后,我需要更改克隆的 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 的单独调用而不是使用对象文字(或映射),但没有任何帮助。所有变体在 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();
    }
}); 
4

2 回答 2

4

我想你的问题在这里...

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

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

您正在克隆容器,切换它的 ID,并将其重新插入到页面中。容器很好,但页面现在包含两个 ID 为 #pdProgram1 的元素。document.getElementById 不会喜欢这样。

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

于 2010-02-04T20:00:26.340 回答
0

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

更多信息在这里

于 2010-02-04T19:16:01.447 回答