建议其他倾销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();
}
});
答案 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。