Ich muss das Body Onload -Event verwenden, aber die JavaScript -Bibliothek von Drittanbietern hat es entführt

StackOverflow https://stackoverflow.com/questions/1704010

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.

War es hilfreich?

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.

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