Quelle est la meilleure façon de remplacer les liens avec JS fonctions?
Un patron qui a commencé à montrer beaucoup dans l'une des applications web, je travaille sont des liens qui se contentaient de faire régulièrement une balise de lien maintenant besoin d'une boîte de pop-up demandant: "êtes-vous sûr?" avant que le lien va aller. (Si l'utilisateur clique sur annuler, rien ne se passe.)
Nous avons une solution qui fonctionne, mais de toute façon nous sommes une web app shop sans Javascript expert, donc je suis parti avec cette rampant se sentir comme il ya une meilleure façon d'obtenir le travail fait.
Donc, JS experts, ce qui est le plus conforme aux normes, de la croix-navigateur de façon à obtenir ce fait?
(Pour mémoire, c'est déjà un site qui nécessite JS, donc pas besoin d'avoir un "non-JS" version. Mais, il n'a pas besoin de travailler dans n'importe quel et tous raisonnablement les navigateurs modernes.)
(Aussi, pour les points de bonus, ce serait bien si les gens avec JS désactivé n'ai pas les liens fonctionnent, plutôt que de contourner la boîte de confirmation.)
Vous devez vous connecter pour publier un commentaire.
Javascript Discret
La meilleure pratique consiste à ajouter des méthodes de gestionnaire d'événement pour les liens.
La confirmer() fonction produit de la boîte de dialogue que vous avez décrit, et renvoie true ou false selon le choix de l'utilisateur.
Méthodes de gestionnaire d'événement sur les liens ont un comportement spécial, qui est qu'ils tuent le lien de l'action, si elle retourne false.
Si vous voulez le lien pour nécessite javascript, le code HTML doit être édité. Retirez le href:
Vous pouvez définir explicitement le lien de destination dans le gestionnaire d'événement:
Si vous souhaitez utiliser la même méthode appelée sur plusieurs liens, vous pouvez acquérir une nodeList des liens que vous voulez, et d'appliquer la méthode à chaque en boucle les nodeList:
Il y a d'autres permutations de la même idée ici, comme l'utilisation d'un nom de classe pour déterminer les liens pour écouter de la méthode, et de passer à un emplacement unique à chacun en fonction de certains critères. Ils sont six, un, demi-douzaine de l'autre.
D'autres Approches (ne pas encourager les pratiques):
Un décourager la pratique est de fixer une méthode via un attribut onclick:
Un autre décourager la pratique est de définir la attribut href à un appel de la fonction:
Noter que ces décourager les pratiques sont toutes les solutions de travail.
Voici comment nous l'avons fait:
(EDIT: Code reformaté pour éviter de défilement horizontale)
Si vous utilisez jQuery, vous feriez:
En jquery c'est quelque chose comme:
Si je comprends ce que jgreep mentionné, si vous voulez seulement le confirmer à apparaître sur quelques liens, vous permettrait de lier le gestionnaire de clic uniquement aux liens avec la bonne classe. Vous pouvez faire cela seulement pour les ancres ou pour n'importe quel élément html qui a la classe.
Une classe de liaison de la version (pas de nécessité pour les attributs onclick): lien externe < script> après tout confirmable contrôles:
C'est un peu de longue haleine en raison de la liaison de travail sur les soumet/boutons. En général, cependant, il est logique d'avoir "dangereuses", les options que vous souhaitez confirmer sur des boutons plutôt que des liens. OBTENEZ de demandes de tirés par les liens ne devrait pas vraiment d'effet activé.
Cela vaut le message à tous les liens, cependant il est un peu plus difficile de faire les liens pas sans javascript automatiquement (en fait son impossible).
Prendre un coup d'oeil à Quel est le meilleur moyen d'ouvrir une nouvelle fenêtre de navigateur. Vous pouvez faire quelque chose de similaire, mais jeter la confirmation avant l'ouverture d'une nouvelle fenêtre.