IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Le onclick return true mais le href n'est pas appelé ! IE m'a tué..


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Le onclick return true mais le href n'est pas appelé ! IE m'a tué..
    Bien le bonjour,

    Ci dessous, un code on ne peut plus simple pour éviter la multi soumission d'un lien. L'exemple est simplifié à outrance pour mettre en lumière le problème. Dans cet exemple, on se contente de recharcher la même page à chaque click sur le lien. Le Href est appelé uniquement au premier clic car le onclick retourne true uniquement si la variable js token est à true. Suite au premier clic, le token est placé à false et tout clic suivant ne fait donc rien.

    Sous Chrome, Firefox, aucun soucis, ce code fonctionne parfaitement.
    Sous IE, si on clique lentement aucun soucis, mais dés lors qu'on clique rapidement sur le lien, et qu'on déclenche en réalité un double clic, le onclick retourne bien true mais le Href n'est pas appelé ce qui est complètement aberrant !

    Pour reproduire le problème, il suffit d'afficher la console de IE et de voir qu'en cliquant rapidement sur le lien, on a des sorties console "false - token false" et donc que le lien n'a pas fonctionné. Sous Chrome cette sortie console ne survient jamais.

    Si un illuminé a une explication à ce phénomène que je n'explique pas, je suis preneur.

    Merci d'avance.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var token = true;
    function checkToken() {
    	if (token == true) {
    		token = false;
    		return true;
    	} else {
    		return false;
    	}
    }
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <a href="javascript:document.location.href = 'test.html';" 
       onclick="if (checkToken()) {  return true; } else { console.log('return false - token false'); return false; }">
    	 LIEN
    </a>

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Mais pourquoi cette syntaxe pour ton lien ?
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="test.html" onclick="return checkToken()">LIEN</a>
    est amplement suffisant... et si tu veux un affichage dans la console, fais-le dans la fonction JavaScript.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Hi,

    Je sais bien que cela suffit.. J'ai juste revu le code afin de pouvoir le présenter car avant le Href faisait un submit..
    Quant au log dans la fonction JS, là aussi, c'est pour l'exemple, je ne cherche pas à faire du beau..

    Mais là n'est pas la question cela ne change rien au problème de fond.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Euhh je suis censé comprendre quoi ?

    Attention je n'ai jamais dit que le Href n'était jamais appelé.. Je dis que sous IE à partir du moment où tu as fait un double clic sur le lien, le lien ne fonctionne plus.. Le mieux pour le tester est de déporter le code dans une petite page html et de l'ouvrir sous IE.. Au début en cliquant doucement, ca fonctionne très bien, la page se recharge à chaque clic.. et après le premier double clic, la page ne se recharge plus... Pourquoi ? Et bien mystère...

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    que le code donné en exemple dans le lien fonctionne ...

    il parait normal que le href ne reponde plsu au second click car la token passe de true à false ...

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Suis ce raisonnement :
    Au premier clic, le token est à true, le Href est appelé, la page est donc rechargée.. Dés lors que la page est rechargée, le token est à nouveau à true et on pourra ainsi cliquer à nouveau sur le lien..

    Ton exemple n'est pas bon car pour mettre en lumière le problème il faut que le href recharge la page.

    Déporte le code dans une page HTML et tu verras sous Chrome par exemple que tu peux bombarder le lien, cela fonctionne très bien. Sous IE, les clics lents fonctionnent mais le premier double clic invalide le lien..

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    si tu recharges la page ... il est normal que le token se remette a true ...
    js ne survit pas à un rechargement de page
    Dans mon exemple je ne recharge pas la page, le token conserve donc sa valeur

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Je suis tout à fait d'accord avec tout ce que tu dis.
    Mais tu ne comprends pas le problème que je cite.

    Il faut que le HREF recharge la page pour pouvoir reproduire le problème.
    Je t'invite à relire mon premier message pour mieux comprendre le soucis.

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    si tu recharges ta page le token repasse à true donc tu repars à zéro.
    je ne comprends pas pourquoi tu t'étonnes de ça ...
    ou alors tu expliques mal ta problématique

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Et bien je vais tacher de reformuler autrement la problématique...

    - Crée une page HTML avec le code cité et avec <!DOCTYPE html>
    - Charge la page dans Chrome
    - Clique lentement sur le lien à plusieurs reprises
    Tu peux constater qu'à chaque clic, la page est bien rechargée (OK)
    - Clique rapidement sur le lien à plusieurs reprises
    Tu peux constater que la page finit toujours par être rechargée (OK)

    Jusqu'ici tout est normal !

    Maintenant fais la même chose sous IE

    - Crée une page HTML avec le code cité et avec <!DOCTYPE html>
    - Charge la page dans IE
    - Clique lentement sur le lien à plusieurs reprises
    Tu peux constater qu'à chaque clic, la page est bien rechargée (OK)
    - Clique rapidement sur le lien à plusieurs reprises
    Tu peux constater qu'après un double clic la page ne se charge plus ! (cf log console JS) (KO !)

    Le pourquoi du problème :
    Suite à l'évènement ondblclick, le onclick retourne bien true mais le Href n'est pas appelé. Du coup la page n'est pas rechargée et resté bloquée avec le token à false.

    C'est anormal à mon sens !

    En espérant avoir été plus clair..

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    haaaaaaaaa ondblclcik !

    je viens de saisir

    rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ondblclick="return false;"

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Cela ne change rien.
    Je viens de tester en ajoutant ondblclick="return false;" sur le lien.

    Je charge la page dans IE
    Je clique doucement c'est ok, la page se recharge bien à chaque clic.
    Je clique rapidement, la page ne se recharge plus et j'ai les sorties console :

    return false (token false)
    return false (token false)
    return false (token false)
    return false (token false)
    return false (token false)
    ... A chaque clic...

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    c'est IE qui gère mal le click et double click

    teste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="console.log('simple click')" ondbllick="console.log('double click')"

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Je vois pas bien en quoi ajouter des logs va me résoudre le problème..
    Tant pis j'abandonne..

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    je n'ai jamais dit que cela résoudrait directement ton problème ...

    c'est juste pour mettre en lumière la gestion des click et bdlclick sous IE ...

    et du coup gerer le dblclick sous ie ...

Discussions similaires

  1. [WebFlow] 1 transition, 2 expressions, mais la première n'est pas executée
    Par erox44 dans le forum Spring Web
    Réponses: 0
    Dernier message: 25/10/2012, 11h02
  2. Pourquoi le "return true;" dans un onclick ?
    Par Bobabar dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/07/2011, 09h03
  3. Image.complete == true mais l'image n'est pas affichée
    Par prgasp77 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 02/11/2010, 08h23
  4. Réponses: 2
    Dernier message: 09/10/2009, 19h25
  5. Réponses: 9
    Dernier message: 17/09/2009, 22h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo