JavaScript IE appendChild() - Inattendu appel à la méthode ou de l'accès à la propriété
J'ai eu ce problème sous IE. J'ai deux divs que j'utilise pour faire glisser les éléments sélectionnés à partir de l'une à l'autre. Disons que j'ai un enfant de l'élément (div) en div1 et certains éléments enfants en div2. J'appelle la div2.méthode appendChild() sur l'élément enfant de la div1. Il enlève l'enfant à partir de div1 et l'ajoute à div2. Si je puis essayez d'ajouter le retour de leur enfant à div1-je obtenir de l'exception suivante "Inattendu appel à la méthode ou de l'accès à la propriété" dans IE. Il fonctionne parfaitement sous firefox. Voir ci-dessous l'extrait de code pour le 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;
}
Fondamentalement déplace de l'enfant sélectionné divs d'un div parent à un autre en les faisant glisser.
OriginalL'auteur Gerrit Brink | 2009-11-10
Vous devez vous connecter pour publier un commentaire.
Pour les résultats de la recherche des avantages - j'ai eu ce même message d'erreur dans internet explorer 6 et 7 "Inattendu appel à la méthode ou de l'accès à la propriété" lors de l'ajout d'un nœud enfant à un espace de noms de l'élément, mais l'espace de noms n'avaient pas été déclarées.
Pour contourner ce problème, j'ai dû ajouter de la déclaration d'espace de noms dans le code HTML:
ou dynamiquement via javascript (Probablement devrait être enveloppé dans un try/catch):
<section>
sans HTML5 shiv. Changé pour un<div>
et cela a fonctionné.OriginalL'auteur Andrew
J'ai eu ce problème dans IE7 et il s'est avéré que les IE7 DOM n'a pas été parfait.
Dans mon cas, j'ai eu une balise d'image rendue par la ASP.NET MCV TagBuilder, qui l'a rendue comme:
Note la balise de fin là et c'est ce qui a causé le problème. Il a travaillé lors du rendu:
Espère que cette aide.
OriginalL'auteur Mikael Östberg
Je suis d'accord avec Kaze no Koe, la définition dynamique le nom des éléments n'est pas le plus à l'épreuve des balles de pratique. Malheureusement, je ne peux pas vous dire comment se débarrasser de l'erreur. Toutefois, je recommande fortement d'utiliser une librairie JavaScript (jQuery, Prototype, Dojo, ...). Ils sont assez petites, relativement facile à apprendre, et beaucoup plus pratique à utiliser que l'horrible API DOM. Dernier mais non le moins, ils vous protègent de nombreux maladroit incompatibilités entre navigateurs. Donnez-lui un essai, après une couple de jours, vous ne pouvez pas imaginer revenir en arrière, je le promets.
OriginalL'auteur Tom Bartel
Êtes-vous sûr que ce n'est pas en train de mourir sur:
- Ce que vous essayez d'accomplir avec cette ligne?
Sérieusement, essayez de la mettre en commentaire. Je ne pense pas que c'est ce que vous pensez qu'il est - n'est-ce pas le droit de la propriété appelée nodeName?
OriginalL'auteur Kaze no Koe
enfants[i].childNodes[0].nom=toLocation;
Chaque enfant div contenu dans le div parent contient aussi une face cachée de la valeur d'entrée. Le parent divs ne contiennent pas un attribut de nom, seulement un numéro d'identification. Lorsque l'enfant divs sont déplacés d'un div parent à l'autre parent, il met à jour la valeur du nom de tous les caché entrées à la balise div id. Lorsque le formulaire est soumis le serveur peut alors distinguer les valeurs qui étaient présents dans le div parent. Cela fonctionne sous IE et Firefox sans faute jusqu'à présent. Le problème définitivement se trouve à l'intérieur de la méthode appendChild() qu'il continue à briser sur cette déclaration. Si un parent div est vide à charge tout fonctionne parfaitement. Si un parent divs enfants sont ajoutées à un autre div, puis de nouveau-je obtenir de l'exception dans IE uniquement.
Malheureusement je ne peut pas mettre en œuvre un cadre encore. Nos étiquettes changent fréquemment d'accueillir de nouvelles exigences.
Merci pour vos réponses sur mon sujet, j'espère que ça a plus de sens maintenant.
Acclamations
Grep
OriginalL'auteur Gerrit Brink
RÉSOLU!... sorte de
Je l'avais caché entrées à l'intérieur de l'enfant divs permettant de stocker l'id de l'élément déplacé pour l'envoi du formulaire. J'ai enlevé le caché entrées et les a placés en-dessous de mon selectionboxes. Chaque fois qu'un div est déplacé, il met à jour le nom de la cachées à le parent divs id. Il semble que IE a un problème avec appendChild() lorsque le nœud a des enfants. Cela ne travaillent parfois et parfois, il a échoué. L'ajout d'un seul élément sans enfants fonctionne toujours. Je ne sais pas exactement quel était le problème, mais au-dessus de la triés.
Acclamations
Grep
OriginalL'auteur Gerrit Brink
juste eu le même problème avec IE7, guéri par l'ajout d'un délai d'attente:
J'ai perdu le compte de l'absence de fois que quelque chose ne fonctionne pas dans IE, mais fonctionne parfaitement dans Firefox qui peut être résolu par un court délai...aucune idée pourquoi!
Désolé! parlé à bientôt...s'avère que mon délai d'attente (dans ce cas) n'a pas fonctionné.
OriginalL'auteur Andrew Grosset