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 :

Popup calendrier indesirable sur [Entree] dans Firefox


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Popup calendrier indesirable sur [Entree] dans Firefox
    Bonjour,
    Je travaille sur un site dans lequel on trouve un formulaire composé de quelques input (text, radio, liste deroulante...) ainsi que des boutons (soumission de la requete, reset du formulaire)
    Ce formulaire comporte aussi deux popups de calendrier qui renseignent les input texte associés
    les popups sont créés par du Javascript (que jen'ai pas fait moi-meme) et ne sont pas des fenetres a part, juste une zone dans la page

    Le probleme qui se pose est le suivant:
    Lors d'un appui sur [Entree] dans n'importe-quel input texte, le popup du premier des deux calendriers s'affiche, et ce, uniquement sous firefox (par opposition à IE6)
    Y a t'il une maniere d'inhiber ce comportement?
    A quoi pourrait-ce etre dû?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 89
    Points : 89
    Points
    89
    Par défaut
    montre nous le code qui fait afficher ton pop-up...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    re.
    En effet ça va surement aider (je m'attendais à ce que ce soit un comportement connu...) desolé

    J'ai reussi à trouver d'où vient la difference de comportement: il s'agirait de la redirection par firefox de l'evenement [Entree] sur la text input sous la forme d'un MouseEvent sur le bouton en question:

    Le code qui installe le popup est le suivant, dans lequel j'ai rajouté un hack-fix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    	# le bouton, la zone de texte entrée et sortie
    	var triggerEl = params.button || params.displayArea || params.inputField;
    	# params.eventName est "clic"....
    	# installation du callback
    	triggerEl["on" + params.eventName] = function(e) {
    		#alert("event");
    		if (e) {
    			#alert("has e "+e);
    			if (e.originalTarget) {
    				#alert("has e.originalTarget");
    				if ( e.currentTarget ) {
    					#alert("has e.currentTarget");
    					if (e.originalTarget.id != e.currentTarget.id) {
    						#alert("redirected event");
    						return false;
    					}
    				}
    			}
    		}
    		#alert("direct event");
     
    		# a partir d'ici, pas trop d'interet
    ###################################################
    		var dateEl = params.inputField || params.displayArea;
    		var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
    		var mustCreate = false;
    		if (!window.calendar) {
    			window.calendar = new Calendar(params.mondayFirst, null, onSelect, function(cal) { cal.hide(); });
    			window.calendar.weekNumbers = params.weekNumbers;
    			mustCreate = true;
    		} else {
    			window.calendar.hide();
    		}
    		window.calendar.setRange(params.range[0], params.range[1]);
    		window.calendar.params = params;
    		window.calendar.setDisabledHandler(params.disableFunc);
    		window.calendar.setDateFormat(dateFmt);
    		if (mustCreate) {
    			window.calendar.create();
    		}
    		window.calendar.parseDate(dateEl.value || dateEl.innerHTML);
    		window.calendar.refresh();
    		window.calendar.showAtElement(params.displayArea || params.inputField, params.align);
    		return false;
    	};
    dans le cas IE, [Entree] sur la zone texte ne fait rien, mais dans le cas FFox, le callback onclick du bouton est appelé, avec comme originalTarget la zone texte, et comme currentTarget le bouton.
    mon fix (un peu bourrin je l'admets) consiste a voir si l'evenement a été redirigé (et ne marche que sous firefox, vu que IE utilise window.event, avec des champs differents, mais comme le probleme ne se pose pas sous IE..)

    Du coup, j'ai l'impression qu'il faudrait plutot dire à la zone texte de supprimer son evenement

    Jonathan

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 270
    Points : 163
    Points
    163
    Par défaut
    si c'est en appuyant sur Entrée => ça fait valider le formulaire

    La solution : onsubmit="return false;" ou <input type="submit" onclick="if(!conditionValidePourEnvoyerLeFormulaire) return false;" />

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Eh bien justement, valider le formulaire par Entree est le comportement que j'attends, mais au lieu de cela, firefox commence par envoyer l'evenement à un bouton du formulaire (meme pas un bouton submit....)

    Mon fix consiste à tester si l'evenement a ete redirigé ou non, et dans ce cas, inactiver le callback (à quel moment Firefox appelle les autres callbacks, et donc la validation du formulaire)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 270
    Points : 163
    Points
    163
    Par défaut
    montre le formulaire, parce que ça me semble improbable que firefox activite un bouton quelconque par la touche entrée sans y être invité..

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Improbable, oui, je suis d'accord
    A moi aussi ça me semble louche , c'est pour ça que je continue à chercher s'il y a pas mieux comme methode (par exemple: j'aurais fait une connerie )

    J'ai reduit la page de maniere a la rendre lisible, mais voici un zip de la page, les 3 fichiers .js (le calendrier, la localisation.fr, et le setup(fichier modifié) ainsi qu'un css pour le style du calendrier

    http://demo21.ovh.com/48cb01b8b1ff10...ceca91346d9eP/

    remarquer que l'utililsation de la zone texte en dessous des calendriers active aussi le premier bouton...

    le html seul:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    <html>
    	<head>
    		<!-- <script type="text/javascript" src="recherche_simple_fichiers/functions.js"></script> -->
    		<script type="text/javascript" src="recherche_simple_fichiers/calendar.js"></script>
    		<script type="text/javascript" src="recherche_simple_fichiers/calendar-fr.js"></script> 
    		<script type="text/javascript" src="recherche_simple_fichiers/calendar-setup.js"></script> 
    		<link rel="stylesheet" type="text/css" media="all" href="recherche_simple_fichiers/calendar-blue.css">
     
    	</head>
     
    	<body onload="setFocus();" class="colorFondPage">
    		<h1>Recherche simple</h1><br> 
    		<form name="recherche" method="post" action="recherche_simple_action">
    			Mots du titre:<input name="SearchableText" class="text" size="80" type="text"> <br><br><br><br><br><br><br><br>
    			Date de signature:<input size="11" maxlength="22" name="dateSignatureMin" id="dateSignatureMin" type="text">
    			<button id="trigger_dateSignatureMin" onclick="">...</button> <br><br><br><br>
     
    			à :<input size="11" maxlength="22" name="dateSignatureMax" id="dateSignatureMin" type="text">
    			<button id="trigger_dateSignatureMax" onclick="">...</button> <br><br><br><br>
    			<button type="submit" class="standalone" onclick="recherche.submit();return true;">Lancer la recherche</button>
    		</form>
     
    		<script type="text/javascript">
    			Calendar.setup(
    				{
    				inputField  : 'dateSignatureMax',
    				ifFormat    : 'd/m/y',
    				button      : 'trigger_dateSignatureMax',
    				mondayFirst : true,
    				range       : [1940, 2040]
    				}
    			);
    		</script>
    		<script type="text/javascript">
    			Calendar.setup(
    				{
    				inputField  : 'dateSignatureMin',
    				ifFormat    : 'd/m/y',
    				button      : 'trigger_dateSignatureMin',
    				mondayFirst : true,
    				range       : [1940, 2040]
    				}
    			);
    		</script>
     
    	</body>
    </html>
    Jonathan

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2008, 15h56
  2. ALT sur balise IMG dans firefox
    Par Hisander dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/09/2007, 12h34
  3. Mauvaise FORM envoyée sur 2 formulaires dans Firefox
    Par suricat dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/08/2007, 15h48
  4. Popup calendrier dans une interface pour remplir textfield
    Par Gasimoto dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 24/05/2007, 10h37
  5. saut de ligne sur li dans firefox
    Par bractar dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 28/03/2006, 14h10

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