Ich muss das Body Onload -Event verwenden, aber die JavaScript -Bibliothek von Drittanbietern hat es entführt
-
19-09-2019 - |
Frage
Ich benutze Simile, um dynamische Zeitpläne zu zeichnen. Ich verwende auch eine interne Bibliothek, um einen Kommentarblog hinzuzufügen. Unsere interne Bibliothek verwendet das Onload-Ereignis des Körperelements, um zu initialisieren.
<body onload="initComments('myID')">
Aber Simile scheint die Onload für ihren eigenen Zweck entführt zu haben, so dass Initormments ('Myid') niemals ausgeführt werden.
Wie könnte ich meinen Initialisierer nicht zum Ausführen des Gleichstromcodes zum Ausführen bringen?
Ich würde es vorziehen, keine andere Bibliothek (dh JQuery) hinzuzufügen, nur um das Problem zu lösen.
Lösung
Verwenden Sie JQuery's $(document).ready
Ereignis, mit dem Sie eine willkürliche Anzahl von Handlern hinzufügen können (im Gegensatz zu onload
).
Andere Tipps
In der Regel möchten Sie sich zunächst vom Einbetten von JavaScript in Ihr HTML als Tag -Attribute fernhalten.
Zweitens überschreiben das Gleichnis wahrscheinlich die onload
(Verwenden Sie es genauso wie Sie). Sie möchten also Ihr Onload -Ereignis hinzufügen, nachdem Sie Gleichnis eingeschlossen haben.
Verwenden Sie JQuery:
<script src="/js/blah/simile.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
initComments('myID');
});
</script>
Verwenden Sie keine Bibliothek (gefunden hier):
<script src="/js/blah/simile.js" type="text/javascript"></script>
<script type="text/javascript">
function addOnloadEvent(fnc){
if ( window.addEventListener ) {
window.addEventListener( "load", fnc, false );
} else if ( window.attachEvent ) {
window.attachEvent( "onload", fnc );
}
else {
var oldOnload = window.onload || function() {};
window.onload = function(e) {
oldOnload(e);
window[fnc](e);
};
}
}
addOnloadEvent(function() { initComments('myID'); });
</script>
Fügen Sie JQuery hinzu und verwenden Sie
$(document).ready(function(){
// Your code here...
});
Es gibt noch einige andere Möglichkeiten, dies in JQuery zu schreiben, aber ich finde, dass dies das Erklärendste ist.
Wenn Sie irgendeine Art von JavaScript -Entwicklung durchführen, sind Sie brauchen JQuery betrachten. Es ist total süß!
Abgesehen von der oben genannten JQuery -Lösung (ich empfehle jedoch sehr, sie zu verwenden, ist es großartig). Hier ist die einfache Vanille -JS -Lösung (da Sie in Ihrer Frage nichts über JQuery erwähnt haben):
// Add this to top of your script.
window.onload = function () {
for (var i = 0; arguments.callee.functions.length > i; i++) {
arguments.callee.functions[i]();
}
};
window.onload.functions = [];
// Now for every onload function you want to add, do:
window.onload.functions.push(initComments('myID'));
Mit Entführten meinen Sie, lädt gleichzeitig nach Ihrem Code und Überschreiben onload
? Stellen Sie in diesem Fall sicher, dass Sie dahinter stehen (als Justin sagt), und bevor Sie es selbst überschreiben, speichern Sie den Wert von onload
Irgendwo, so wird es immer noch angerufen (von deinem eigenen Handler).
Das heißt, wenn Sie jQuery nicht verwenden.
Wenn Sie hier schauen, sehen Sie eine Lösung, die JQuery, glaube ich, oder eine Änderung davon verwendet, aber es sollte für Ihre Bedürfnisse funktionieren.
http://dean.edwards.name/weblog/2006/06/again/
// Dean Edwards/Matthias Miller/John Resig
function init() {
// quit if this function has already been called
if (arguments.callee.done) return;
// flag this function so we don't do the same thing twice
arguments.callee.done = true;
// kill the timer
if (_timer) clearInterval(_timer);
// do stuff
};
/* for Mozilla/Opera9 */
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", init, false);
}
/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
if (this.readyState == "complete") {
init(); // call the onload handler
}
};
/*@end @*/
/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
var _timer = setInterval(function() {
if (/loaded|complete/.test(document.readyState)) {
init(); // call the onload handler
}
}, 10);
}
/* for other browsers */
/*window.onload = init; */
Sie werden sehen, dass die letzte Zeile kommentiert wird. Für den Fall, dass es so weit kommt, werden Sie sie entweder verkäubert (es wird nicht ausgeführt, oder Ihr Code wird nicht ausgeführt, aber dies funktioniert für die großen Browser.