Ger*_*ink 5 javascript internet-explorer call appendchild
我在IE中遇到过这个问题.我有两个div用于将所选元素从一个拖到另一个.假设我在div1中有一个子元素(也是div),在div2中有一些子元素.我在div1的子元素上调用div2.appendChild()方法.它从div1中删除子项并将其附加到div2.如果我然后尝试将子项追加到div1,我在IE中得到以下异常"对方法或属性访问的意外调用".它在firefox中运行得很好.请参阅以下javascript的代码段.
function moveSelectedGroupBoxItems(toLocation, grp){
document.body.className = 'groupBoxDefaultCursor';
if(groupBoxfromLocation != toLocation){
if(grp == groupBoxGroup){
var fromVal = document.getElementById(groupBoxfromLocation);
var toVal = document.getElementById(toLocation);
var children = fromVal.childNodes;
for (var i = children.length - 1; i >= 0; i--) {
if(children[i].className == 'groupBoxItemSelected'){
children[i].childNodes[0].name=toLocation;
toVal.appendChild(children[i]);
}
}
}
}
groupBoxfromLocation = '';
groupBoxGroup = '';
return false;
}
Run Code Online (Sandbox Code Playgroud)
这基本上在拖动时将所选子div从一个父div移动到另一个父div.
对于搜索结果的好处 - 在将子节点附加到命名空间元素时,我在IE 6和7"意外调用方法或属性访问"中遇到了同样的错误,但是尚未声明命名空间.
var a=document.createElement("foo:blah");
var b=document.createElement("div");
a.appendChild(b); //Fails
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我不得不将命名空间声明添加到HTML代码中:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo>
Run Code Online (Sandbox Code Playgroud)
或通过javascript动态(可能应该包装在try/catch中):
var namespaces = document.namespaces;
if(namespaces) {
namespaces.add("foo", null, null);
}
Run Code Online (Sandbox Code Playgroud)
解决了!...我在子 div 中隐藏了输入,它存储了要移动以进行表单提交的项目的 id。我删除了隐藏的输入并将它们放置在我的选择框下方。每次移动 div 时,它都会将隐藏的名称更新为父 div id。当节点有子节点时,IE 似乎对appendChild() 有问题。这有时有效,有时失败。附加没有子元素的单个元素总是有效的。我不确定到底是什么问题,但上面已经解决了。
干杯
格雷普
| 归档时间: |
|
| 查看次数: |
17185 次 |
| 最近记录: |