Frage

Ich habe dieses Problem in IE worden ist. Ich habe zwei divs die ich von einem zum anderen ausgewählten Elemente ziehen verwenden. Lets sagen, dass ich ein untergeordnetes Element (auch ein div) in div1 und einige untergeordnete Elemente in div2 haben. Ich nenne den div2.appendChild () -Methode für Kind-Element von div1. Es entfernt das Kind von div1 und hängt es an div2. Wenn ich dann versuchen, das Kind zurück zu div1 anhängen erhalte ich die folgende Ausnahme „Unerwarteter Aufruf Methode oder Eigenschaft Zugriff“ im Internet Explorer. Es funktioniert perfekt in Firefox. Im folgenden sehen Sie Code-Snippet für das 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;
}

Diese im Grunde verschiebt die ausgewählten Kind divs von einem Elternteil div zum anderen auf ziehen.

War es hilfreich?

Lösung 6

GELÖST! ... Art Ich hatte Eingänge innerhalb des Kindes divs versteckt, die die ID des Elements gespeichert wird für Formularübermittlung bewegt. Ich entfernte die versteckten Eingänge und legte sich unter meinem selectionboxes. Jedes Mal, wenn ein div bewegt wird aktualisiert er den Namen des verborgenen an die Mutter divs id. Es scheint, IE hat ein Problem mit appendChild (), wenn die Knoten Kinder haben. Das hat manchmal funktioniert und manchmal versagt es. Anfügen ein einzelnes Element ohne Kinder funktioniert immer. Ich bin nicht sicher, was das Problem war, aber die oben sortiert sie aus.

Prost

Grep

Andere Tipps

Für die Suchergebnisse Vorteile - ich hatte den gleichen Fehler im IE 6 und 7 „Unerwarteter Aufruf Methode oder Eigenschaft Zugriff“, wenn ein Kind-Knoten zu einem Namespace-Elemente anhang, aber der Namensraum nicht deklariert worden war.

var a=document.createElement("foo:blah");
var b=document.createElement("div");
a.appendChild(b); //Fails

Um dies zu umgehen, ich hatte die Namespace-Deklaration entweder in den HTML-Code hinzuzufügen:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo>

oder dynamisch über Javascript (wahrscheinlich in try / catch gewickelt werden soll):

var namespaces = document.namespaces;
if(namespaces) {
    namespaces.add("foo", null, null);
}

hatte ich dieses Problem in IE7 und es stellte sich heraus, dass der IE7 DOM war nicht perfekt.

In meinem Fall hatte ich einen Bild-Tag durch den ASP.NET MCV TagBuilder gemacht, das machte es so:

<img ...></img>

Beachten Sie den End-Tag dort und das war, was das Problem verursacht hat. Es funktionierte beim Rendern als:

<img ... />

Hope, das hilft.

Ich bin mit Kaze noe Koe, dynamisch den Namen von Elementen Einstellung ist nicht die kugelsichere Praxis. Leider kann ich Ihnen nicht sagen, wie die Beseitigung der Störung zu erhalten. Allerdings empfehle ich eine JavaScript-Bibliothek (jQuery, Prototype, Dojo, ...). Sie sind sehr klein, relativ leicht zu erlernen, und viel bequemer als der schreckliche DOM-API zu verwenden. Last but not least, sie Sie von vielen so umständlich Browser-Inkompatibilitäten abzuschirmen. Probieren Sie es aus, nach ein paar Tagen werden Sie sich nicht vorstellen können gehen zurück, das verspreche ich.

Sind Sie sicher, dass es nicht auf stirbt:

children[i].childNodes[0].name=toLocation;

Was sind Sie mit dieser Linie zu erreichen versuchen?


Im Ernst, versuchen, es kommentieren Sie. Ich glaube nicht einmal, es ist das, was Sie denken, es ist - ist nicht die richtige Eigenschaft namens nodeName

Kinder [i] .childNodes [0] .name = toLocation;

Jedes Kind div in der übergeordneten div enthalten ist, enthält auch einen versteckten Eingabewert. Die Eltern divs enthalten keinen Namen Attribut, nur eine ID. Wenn das Kind divs von einem Elternteil div zu einem anderen Elternteil gezogen werden aktualisiert er den Namen Wert aller versteckten Eingaben an die divs id. Wenn das Formular kann der Server übermittelt wird dann unterscheiden, welche Werte in der bestimmten übergeordneten div vorhanden waren. Dies funktioniert in IE und Firefox, ohne bisher fehl. Das Problem liegt auf jeden Fall innerhalb der appendChild () -Methode, wie es hält diese Aussage zu brechen. Wenn ein Elternteil div bei Last funktioniert perfekt alles leer. Wenn ein Elternteil divs Kinder zu einem anderen div angehängt werden und dann wieder zurück bekomme ich die Ausnahme in nur IE.

Leider kann ich nicht einen Rahmen implementieren als die noch. Unsere Tags häufig neue Anforderungen ändern zu empfangen.

Vielen Dank für Ihre Antworten auf meinem Thema, hofft, macht dies mehr Sinn jetzt.

Prost

Grep

hatte gerade das gleiche Problem mit IE7, geheilt durch einen Timeout hinzu:

setTimeout(function(){gallery.appendChild(g_field)},300);

Ich habe Zählung der nicht mal etwas verloren in IE nicht funktioniert, aber funktioniert perfekt in Firefox, die durch eine kurze Verzögerung gelöst werden kann ... keine Ahnung warum!

Es tut uns leid! sprach bald ... schaltet sich mein Timeout (in diesem Fall) funktionierte nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top