Ich habe ein Problem mit Cross-Browser native Ereignisse vs Callback-Ereignisse.Browser native klick vor dom: loaded
Ich habe einen HTML-Link "Klicken Sie mich" mit einem gegebenen href=""
. Unter dom:loaded
füge ich eine Funktion an diesen Link an (um Ajax Stuff zu machen).
JavaScript-Code wird am Ende der Seite geladen, um YSlow Recommandation zu folgen.
Ausgabe:
Wenn Sie wirklich schnell diese Seite laden (F5) dann auf den Link klicken dann
- die
alert()
nicht - der Link folgt (Neuladen der Seite aufgerufen wird)
Es passiert, wenn der Server nachläuft. Tatsächlich ist die Seite noch nicht fertig geladen und der Browser führt den Code aus.
Demo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
</head>
<body>
<a href="#toolate" id="action">Click Me</a>
<!-- According to YSlow Recommandation load at the bottom -->
<script src="../js/lib/prototype.js" type="text/javascript" language="JavaScript"></script>
<script>
/* <![CDATA[ */
document.observe('dom:loaded', function() {
$('action').observe('click', function(event){ alert("click"); Event.stop(event); });
});
/* ]]> */
</script>
</body>
</html>
Turn Around:
A turn around ist onClick="return false;"
hinzuzufügen:
<a href="#toolate" id="action" onClick="return false;">Click Me</a>
Es ist für Lags funktioniert, aber nicht für einen schnellen Klick. Und Ich mag nicht diese Art von turn around, weil mein Ziel, die onclick
auf allen <a href="">
Mit freundlichen Grüßen
können Sie einfach die Kontrolle deaktivieren und dann i aktivieren t wenn das Dokument fertig geladen ist? Mit anderen Worten: Wenn Sie den Klick vor dem Laden der Seite verarbeiten können, lassen Sie keine Klicks zu, bis die Seite geladen wird. –
Stimmen Sie zu, aber wie sagen Sie zum Browser: "Folgen Sie ahref nicht, bis Dokument fertig geladen wird"? Sie können JavaScript verwenden, aber der Engineer hat noch nicht begonnen. –
Ich habe eine Demo hinzugefügt: http://files.getdropbox.com/u/255810/Jalios/Demo/Shield/shield.html –