Quatre options pour vous:
Option 0
Allez lire Sean Hogan's answer, il a souligné que cela peut être fait avec la délégation et moi avons mis sur pied un exemple (doh!) la mise en oeuvre.
Option 1
Vous pouvez faire le href
des liens « # » jusqu'à ce que jQuery est chargé, puis (le cas échéant) changer à ce qu'il devrait vraiment être. Vous pouvez stocker ce que le href
doit être dans un attribut data-
, .: par exemple
<a href='javascript:;' data-href='realtarget.html'>blah</a>
Puis:
jQuery(function($) {
$("a[data-href]").each(function() {
var $this = $(this);
$this.attr("href", $this.attr("data-href"));
});
});
Encore une fois, ce dernier bit seulement si vous avez vraiment besoin de faire le href un href. Si vous manipulez le clic via JavaScript, inutile de le faire. Si la validation est une partie importante de votre cycle de développement, il est important de noter que les attributs sous la forme data-xyz
ne sont pas valides dans HTML4 et avant (les navigateurs ne se soucient pas vraiment, mais encore une fois, si vous utilisez la validation ...) . Ils deviennent valables dès HTML5.
Option 2
utilisation en ligne onclick
attributs pour intercepter le clic avant le chargement jQuery et dire essentiellement "Désolé, un moment". Donc, dans une balise script
au haut de votre fichier:
function sorryLoading() {
alert("Sorry, the page is still loading, one moment please.");
return false;
}
... puis sur les liens:
<a href='realtarget.html' class='sorry' onclick='return sorryLoading();'>blah</a>
... puis retirez la onclick
la charge jQuery:
jQuery(function($) {
$("a.sorry").removeClass('sorry').attr("onclick", "").click(yourRealClickHandler);
});
(Vous pouvez laisser le dernier bit — l'appel click
— off si elles n'ont pas tous le même gestionnaire de clic.)
J'ai utilisé une classe ci-dessus pour la différence entre ces liens et d'autres qui pourraient avoir une ligne onclick
(sinon, de façon surprenante le sélecteur « un [onclick ] "fonctionne en fait sur Chrome, Opera et Firefox pour Linux et IE6 et IE8 sous Windows).
Option 3
Comme il semble que vous voulez que la page soit des charges non fonctionnel jusqu'à ce que jQuery, voici une autre approche:
- Assurez-vous que la balise de script pour jQuery est dans le
head
section de votre page (pas en bas, où je recommande normalement de le mettre).
- Au bas de la page, juste avant la fermeture de la balise
body
, accrochez vos gestionnaires de clic sans les envelopper dans un appel jQuery.ready
(ou l'un de ses raccourcis).
La raison est la suivante: # 1 veillera à ce que jQuery est lui-même chargé avant la page en cours rendus et # 2 accrochera les gestionnaires le plus tôt possible. Google recommande d'utiliser une balise à la fin de la page comme cela (plutôt qu'une fonction ready
ou similaire) et dit qu'à ce stade, les éléments DOM seront prêts à être découverts.
séparément, bien sûr, vous voulez vous assurer que le temps pendant lequel les liens ne font pas ce que l'utilisateur attend est absolument aussi bref que possible en faisant tous les trucs d'optimisation de chargement des pages que vous pouvez. Cliquer sur un lien et ne pas l'avoir fait ce à quoi il ressemble fait une mauvaise expérience utilisateur.
Vous pouvez essayer une approche de l'interface utilisateur. peut-être créer un préchargeur. – sheeks06
J'ai mis à jour la réponse de Sean Hogan avec un exemple. Il a absolument raison sur la façon de s'y prendre. –