IE6没有使用jQuery Attr Call更改属性(ID和名称) - 有什么建议吗?
-
18-09-2019 - |
题
建议其他倾倒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 ...
更多信息 这里.