jquery-event für ein element Rendern
Ich versuche, alles zu tun, dom-Manipulationen Bildschirm ausschalten und dann wieder sichtbar machen. Die funktioniert, außer ich habe jetzt die situation, wo ich versuche, es zu tun mit einer form, die ich will, um den Fokus auf das erste input-text-auf-rendering der browser.
So etwas wie: myForm.prependTo(myDiv).show().find('input:first').focus();
Problem ist, dass der Fokus wird aufgerufen, bevor die form fertig rendering, die Ursache der schöne Fehler 'Kann nicht verschieben Sie den Fokus auf das Steuerelement, denn es ist unsichtbar, nicht aktiviert oder von einem Typ, der nicht akzeptiert, focus'
Wie gehen andere web-Entwickler behandeln die ähnliche situation zu manipulieren Elemente außerhalb des Bildschirms und dann macht es sichtbar? Ich möchte die jQuery-hatte sowas
myForm.prependTo(myDiv, function() { /* on render code here */})
Ich kenne einen Weg, es zu tun, setzt ein Zeitlimit und wenn es ausgelöst wird, lege ich den Fokus auf den input, aber ich fühle mich wie das ist wirklich nicht der sauberste Weg, Dinge zu tun. Ich weiß, das iframe hat ein onload-Ereignis, so bin ich neugierig, ob die Menschen in der Regel ziehen Ihre Elemente in einem verborgenen iframe und hören für seine load-Ereignis zu wissen, wenn das element beendet ist rendering? Wenn ja könnten Sie mir ein Beispiel dafür?
.focus
nach dem das Formular angezeigt wird?wie ich schon sagte, bekomme ich "Sie können nicht verschieben Sie den Fokus..." - Fehler. Dies ist aufgrund der Tatsache, dass der Fokus genannt, während der browser noch Rendern des Formulars. Grundsätzlich ist der browser sagt: 'hey you cant Fokus auf das element, es ist nicht sichtbar'.
Ok, ich hatte den Eindruck, dass
myDiv
war nicht angezeigt, bis später.Was genau machst du offscreen? In Fall, dass Sie nicht erkennen, die meisten DOM-Manipulationen nicht geschehen, Leben, wie Ihr code ausgeführt wird. Der browser neigt dazu, Warteschlange bis die Manipulationen und dann re-layout der Seite, wenn Sie Sie JS abgeschlossen.
Offscreen habe ich Elemente einer form hinzufügen. Nach, dass ich verschieben Sie es auf eine leere Mitte div und dann sichtbar machen (mit .show()) und dann den Fokus auf das erste Eingabefeld. Nichts besonderes.
InformationsquelleAutor paul smith | 2012-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
.show()
ist synchron, so dass Sie nicht brauchen, um eine Beendigung-Funktion mit.Die Funktion selbst kann synchron sein, aber die Zeichnung der browser muss asynchron, weil wenn nicht, dann würde ich mich nicht mit der Frage auf der hand 🙂
Was ich wissen möchte ist, wie Sie wissen, wenn der browser fertig ist das rendering. Ein billiger trick ist, um Benutzer einen timer, aber ich glaube nicht wirklich, das ist die Art, wie es getan werden sollte.
InformationsquelleAutor The Alpha