Wie fügt man eine hinzu? onload
man einem Element Ereignis hinzu?
Kann ich benutzen:
<div onload="oQuickReply.swap();" ></div>
dafür?
javascript
html
monkey_boys
quelle
quelle
body
besserdiv
div
Elemente "laden" nicht.Antworten:
Nein, das kannst du nicht. Der einfachste Weg, dies zum Laufen zu bringen, besteht darin, den Funktionsaufruf direkt nach dem Element zu setzen
Beispiel:
oder - noch besser - direkt vor
</body>
:... damit das Laden des folgenden Inhalts nicht blockiert wird.
quelle
</body>
. Zum Beispiel, wenn Sie das<div>
nur ausblenden möchten, wenn Javascript aktiviert ist, aber "blinken" vermeiden möchten . Die Sichtbarkeitszeit hängt davon ab, wie lange der Browser alle Inline- / externen Skripte laden / analysieren muss.onload
Das
onload
Ereignis kann nur für sichdocument(body)
selbst, Frames, Bilder und Skripte verwendet werden. Mit anderen Worten, es kann nur an den Körper und / oder jede externe Ressource angehängt werden . Das div ist keine externe Ressource und wird als Teil des Körpers geladen, sodass dasonload
Ereignis dort nicht angewendet wird.quelle
onload
nicht funktionieren (ich habe versucht, diesen Rat in einem Inline-Skript zu verwenden, und festgestellt, dass er nicht funktioniert)<script>
src
Sie können einige js automatisch für ein IMG-Element mit onerror und ohne src auslösen.
quelle
Onload-Ereignis wird nur mit wenigen Tags unterstützt, wie unten aufgeführt.
Hier die Referenz für das Onload-Ereignis
quelle
Versuche dies! Und benutze niemals zweimal den Auslöser für div!
Sie können die Funktion definieren, die vor dem div-Tag aufgerufen werden soll.
DEMO: jsfiddle
quelle
onload
), und ruft dann diese Funktionen auf. Das Skript funktioniert auch, wenn Sie das Attribut in etwas anderes alsonload
z. B. jsfiddle.net/mrszgbxhIch möchte hier nur hinzufügen, dass, wenn jemand eine Funktion beim Laden von div aufrufen möchte und Sie jQuery nicht verwenden möchten (aufgrund von Konflikten wie in meinem Fall), einfach eine Funktion nach dem gesamten HTML-Code oder einem anderen aufrufen möchten anderer Code, den Sie geschrieben haben, einschließlich des Funktionscodes, und rufen Sie einfach eine Funktion auf.
ODER
quelle
Wir können MutationObserver verwenden, um das Problem auf effiziente Weise zu lösen, indem wir unten einen Beispielcode hinzufügen
quelle
Im November 2019 suche ich nach einer Möglichkeit, eine (hypothetische) zu erstellen,
onparse
EventListener
für<elements>
die es keine gibtonload
.Das (hypothetische)
onparse
EventListener
muss in der Lage sein zu hören, wenn ein Element analysiert wird .Dritter Versuch (und endgültige Lösung)
Ich war ziemlich zufrieden mit dem zweiten Versuch unten, aber es fiel mir auf, dass ich den Code kürzer und einfacher machen kann, indem ich ein maßgeschneidertes Ereignis erstelle:
Dies ist die bisher beste Lösung.
Das folgende Beispiel:
parse
Event
window.onload
), die:data-onparse
parse
EventListener
an jedes dieser Elemente anparse
Event
an jedes dieser Elemente, um das auszuführenCallback
Arbeitsbeispiel:
Zweiter Versuch
Der erste Versuch unten (basierend auf
@JohnWilliams
'Brillant Empty Image Hack' ) verwendete einen fest codierten<img />
und funktionierenden.Ich dachte, es sollte möglich sein, das fest codierte
<img />
Element vollständig zu entfernen und es nur dynamisch einzufügen, nachdem in einem Element, das einonparse
Ereignis auslösen musste, ein Attribut wie das folgende festgestellt wurde :Es stellt sich heraus, dass dies sehr gut funktioniert.
Das folgende Beispiel:
data-onparse
<img src />
und hängt es unmittelbar nach jedem dieser Elemente an das Dokument anonerror
EventListener
wenn die Rendering-Engine jeweils analysiert<img src />
Callback
und entfernt das dynamisch<img src />
aus dem Dokument generierteArbeitsbeispiel:
Erster Versuch
Ich kann auf
@JohnWilliams
'<img src>
Hack ' aufbauen (auf dieser Seite ab 2017) - das ist bisher der beste Ansatz, den ich je gesehen habe.Das folgende Beispiel:
onerror
EventListener
wenn die Rendering-Engine analysiert wird<img src />
Callback
und entfernt es<img src />
aus dem DokumentArbeitsbeispiel:
quelle
Verwenden Sie einen Iframe und blenden Sie ihn aus. Iframe funktioniert wie ein Body-Tag
quelle
Nach dem Einfügen eines Teils von HTML (Vorlageninstanz) musste ein Initialisierungscode ausgeführt werden, und natürlich hatte ich keinen Zugriff auf den Code, der die Vorlage manipuliert und das DOM ändert. Die gleiche Idee gilt für jede teilweise Änderung des DOM durch Einfügen eines HTML-Elements, normalerweise a
<div>
.Vor einiger Zeit habe ich einen Hack mit dem Onload-Ereignis eines fast unsichtbaren gemacht
<img>
in einem enthalten<div>
, aber entdeckt , dass ein scoped, leerer Stil wird auch tun:Update (15. Juli 2017) - Die
<style>
Onload wird in der letzten Version des IE nicht unterstützt. Edge unterstützt es zwar, aber einige Benutzer sehen dies als einen anderen Browser und bleiben beim IE. Das<img>
Element scheint in allen Browsern besser zu funktionieren.Verwenden Sie einen Inline-Quellcode, der das Bild klein und transparent hält, um die visuelle Auswirkung und den Ressourcenverbrauch des Bildes zu minimieren.
Ein Kommentar, den ich zur Verwendung von a machen muss,
<script>
ist, wie viel schwieriger es ist, festzustellen, welche<div>
Nähe sich das Skript befindet, insbesondere bei Vorlagen, bei denen Sie nicht in jeder von der Vorlage generierten Instanz eine identische ID haben können. Ich dachte, die Antwort könnte document.currentScript sein, aber dies wird nicht allgemein unterstützt. Ein<script>
Element kann seinen eigenen DOM-Standort nicht zuverlässig bestimmen. Ein Verweis auf "dies" verweist auf das Hauptfenster und ist nicht hilfreich.Ich glaube, es ist notwendig, sich mit der Verwendung eines
<img>
Elements zufrieden zu geben, obwohl es doof ist. Dies könnte eine Lücke im DOM / Javascript-Framework sein, die das Einstecken verwenden könnte.quelle
Da das
onload
Ereignis nur von wenigen Elementen unterstützt wird, müssen Sie eine alternative Methode verwenden.Sie können hierfür einen MutationObserver verwenden :
quelle
Ich mag die YUI3-Bibliothek für solche Dinge wirklich.
Siehe: http://developer.yahoo.com/yui/3/event/#onavailable
quelle
onload
.Ich lerne Javascript und JQuery und habe die ganze Antwort durchgearbeitet. Beim Aufruf der Javascript-Funktion zum Laden des div-Elements hatte ich das gleiche Problem. Ich habe es versucht
$('<divid>').ready(function(){alert('test'})
und es hat bei mir funktioniert. Ich möchte wissen, ob dies eine gute Möglichkeit ist, einen Onload-Aufruf für das div-Element so auszuführen, wie ich es mit dem jquery-Selektor getan habe.Vielen Dank
quelle
Wie gesagt, Sie können das onLoad-Ereignis nicht auf einem DIV verwenden, sondern vor dem Body-Tag.
aber für den Fall, dass Sie eine Fußzeilendatei haben und diese auf vielen Seiten einfügen. Es ist besser, zuerst zu überprüfen, ob das gewünschte Div auf dieser Seite angezeigt wird, damit der Code nicht auf den Seiten ausgeführt wird, die dieses DIV nicht enthalten, damit es schneller geladen wird und Zeit für Ihre Anwendung gespart wird.
Sie müssen diesem DIV also eine ID geben und Folgendes tun:
quelle
Ich hatte die gleiche Frage und versuchte, eine Div dazu zu bringen, ein Bildlaufskript mit Onload oder Load zu laden. Das Problem, das ich fand, war, dass es immer funktionieren würde, bevor die Div geöffnet werden konnte, nicht während oder nach, also würde es nicht wirklich funktionieren.
Dann habe ich mir das als Workaround ausgedacht.
Ich platzierte die Div in einer Spanne und gab der Spanne zwei Ereignisse, ein Mouseover und ein Mouseout. Dann platzierte ich unter dieser Div einen Link, um die Div zu öffnen, und gab diesem Link ein Ereignis für einen Klick. Alle Ereignisse sind exakt gleich, damit die Seite zum Ende der Seite scrollen kann. Wenn Sie nun auf die Schaltfläche zum Öffnen des Div klicken, springt die Seite teilweise nach unten, und das Div wird über der Schaltfläche geöffnet, wodurch die Mouseover- und Mouseout-Ereignisse dazu beitragen, das Scroll-Down-Skript zu verschieben. Dann wird jede Bewegung der Maus an diesem Punkt das Skript ein letztes Mal drücken.
quelle
Sie können ein Intervall verwenden, um danach zu suchen, bis es wie folgt geladen wird : https://codepen.io/pager/pen/MBgGGM
quelle
Beantworten Sie zuerst Ihre Frage: Nein, Sie können nicht, nicht direkt, wie Sie es wollten. Es mag etwas spät sein zu antworten, aber dies ist meine Lösung ohne jQuery, reines Javascript. Es wurde ursprünglich geschrieben, um eine Größenänderungsfunktion auf Textbereiche anzuwenden, nachdem DOM geladen und aufgeschlüsselt wurde.
Genauso wie Sie es verwenden könnten, um etwas mit (allen) Divs zu tun, oder nur mit einem, falls angegeben, wie folgt:
Wenn Sie wirklich etwas mit einem Div tun müssen, das nach dem Laden des DOM geladen wird, z. B. nach einem Ajax-Aufruf, können Sie einen sehr hilfreichen Hack verwenden, der leicht zu verstehen ist und bei dem Sie feststellen werden, dass Sie mit ... arbeiten. Elemente-vor-dem-dom-ist-bereit ... . Es heißt "bevor das DOM fertig ist", aber es funktioniert genauso brillant, nach einer Ajax-Einfügung oder js-appendChild-was auch immer von einem Div. Hier ist der Code mit einigen winzigen Änderungen an meinen Anforderungen.
CSS
Javascript
quelle
Wenn Sie HTML vom Server laden und in den DOM-Baum einfügen, können Sie es verwenden,
DOMSubtreeModified
es ist jedoch veraltet. Sie können alsoMutationObserver
neuen Inhalt in der loadElement-Funktion direkt verwenden oder nur erkennen, sodass Sie nicht auf DOM-Ereignisse warten müssenCode-Snippet anzeigen
quelle
Sie können einen Ereignis-Listener wie folgt anhängen. Es wird immer dann ausgelöst, wenn der Div mit dem Selektor
#my-id
vollständig in das DOM geladen wird.In diesem Fall kann EventName "Laden" oder "Klicken" sein.
https://api.jquery.com/on/#on-events-selector-data-handler
quelle
Verwenden Sie stattdessen das Ereignis body.onload, entweder über attribute (
<body onload="myFn()"> ...
) oder durch Binden eines Ereignisses in Javascript. Dies ist bei jQuery sehr häufig :quelle
Versuche dies.
Versuchen Sie auch dieses. Sie müssen entfernen
.
aus ,oQuickReply.swap()
um die Funktion Arbeits zu machen.quelle
alert("This is a div.");
aufgerufen, wenn diese Zeile ausgeführt und das Ergebnis (das istundefined
) zugewiesen wirddiv.onload
. Welches ist völlig sinnlos.quelle