Frage

Ich versuche, ein div zu machen, dass, wenn Sie es verwandelt sich in ein Eingabefeld klicken, und fokussiert es. Ich benutze Prototyp dieses Ziel zu erreichen. Dies funktioniert sowohl in Chrome und Firefox, aber nicht im Internet Explorer. IE weigert sich, den neu hinzugefügten Eingabefeld zu konzentrieren, auch wenn ich eine 1-Sekunden-Zeitsperre gesetzt.

Grundsätzlich ist der Code funktioniert wie folgt:

var viewElement = new Element("div").update("text");
var editElement = new Element("input", {"type":"text"});
root.update(viewElement);

// pseudo shortcut for the sake of information:
viewElementOnClick = function(event) {
    root.update(editElement);
    editElement.focus();
}

Das obige Beispiel eine verkürzte Version des aktuellen Code ist, der eigentliche Code funktioniert gut, mit Ausnahme des Fokus Bit im Internet Explorer.

Gibt es Einschränkungen für die Fokus-Funktion im Internet Explorer? Muss ich den Eingang in eine Form bringen?

War es hilfreich?

Lösung

Meine Vermutung ist, dass IE hat den DOM noch aktualisiert, wenn Sie den Anruf konzentrieren (). Manchmal Browser warten, bis ein Skript fertig ist die Ausführung vor dem DOM zu aktualisieren.

Ich würde versuchen, das Update zu tun, dann tun

setTimeout("setFocus", 0);

function setFocus()
{
    editElement.focus();
}

Die andere Option wäre beiden Elemente jederzeit in dem DOM zu haben und tauscht nur die style.display auf ihnen je nachdem, was Sie brauchen, zu einem bestimmten Zeitpunkt versteckt / angezeigt.

Andere Tipps

Welche Version IE? Was ist Ihr DocType auf? ist es Modus Standards oder Macken streng? Jegliche JavaScript-Fehler erscheinen (überprüfen Sie die Statusleiste links unten für eine kleine gelbe Warnzeichen)? Aktivieren Fehler für alle Fehler über Extras ankündigt> Optionen> Erweitert.

Oisin

Die Frage wird bereits von 17 von 26 . Ich möchte nur darauf hinweisen, hat dieser Prototyp nativen Mechanismus hierfür: Function.defer ( )

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