annuler preventDefault() ou le meilleur moyen de faire le désactiver les collections de liens
J'ai une page qui a des écouteurs d'événement pour l'état du réseau. Lorsque le réseau est "hors ligne" je veux désactiver toutes les croix domaine des liens pour aller en mode hors ligne. J'ai essayé d'utiliser .preventDefault()
, cependant lorsque l'application est de nouveau en ligne j'ai besoin de ré-activer les liens.
Des Écouteurs D'Événement
//check network status
if(!navigator.onLine) {
offlineLinks(); //Offline mode function
}
//add event listeners for network status
window.addEventListener('offline', function(e) {
offlineLinks(); //Offline mode function
}, false);
window.addEventListener('online', function(e) {
//need to re-enable links/Online mode
}, false);
window.addEventListener('error', function(e) {
alert('Error fetching manifest: there is a good chance we are offline.');
offlineLinks(); //Offline mode function
});
Fonction à la "dé-liaison"
function offlineLinks() {
$('a[href^="http"]').click(function(e) {
e.preventDefault();
$('#offline-dialog').dialog({
modal: true,
buttons: {
Ok: function() {
$(this).dialog('close');
}
}
});
});
}
Je suis à la recherche d'une solution évolutive qui ne cause pas de lag si il y a un nombre important de liens sur la page. Est-il une solution simple pour inverser la .preventDefault()
appel ou une meilleure façon d'accomplir cette tâche?
Solutions Possibles
Mes premières pensées ont été soit stocker un tableau de la href valeurs et ensuite de supprimer/ajouter. J'ai été jouer avec le HTML5 stockage à l'aide de webdb
's j'ai pu créer une base de données pour dynamiquement et tirez le hrefs onclick...cependant, je ne suis pas sûr si c'est la meilleure solution pour cela.
OriginalL'auteur jon3laze | 2011-06-14
Vous devez vous connecter pour publier un commentaire.
Vous semblez être à l'aide de jQuery, au moins pour le lien gestionnaire de la partie.
La chose à réaliser est que de $.cliquez sur(gestionnaire) est juste un raccourci pour .bind('click', gestionnaire). Si vous définissez le gestionnaire d'ailleurs, vous pouvez également séparer plus tard, comme ceci:
Par la voie, href^="http" est un peu fragile, si vous ne voulez que cela se produise à des liens externes. Liens internes pourrait commencer par "http", et des liens externes pourrait commencer avec d'autres protocoles comme le "ftp". Mieux de donner de tels liens de leur propre classe, comme Wikipédia le fait avec les "externes".
.bind("click:offline", f)
et.unbind("click:offline")
OriginalL'auteur NeilK