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

Struts 1 Java Discussion :

Désactiver la validation du form sur pression de la touche Entrée


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut Désactiver la validation du form sur pression de la touche Entrée
    Bonjour,
    Je travaille sur une application Java Web avec Struts.
    J'ai une page qui contient 3 onglets disposés dans un layout. Sur un de ces pages, j'ai un champ texte, sur lequel je veux programmer une action spécifique de la touche Entrée via le event.keycode. J'ai écrit une petite fonction pour intercepter l'évènement "Touche entrée pressée" et effectuer mon traitement spécifique, tout va bien à ce niveau là.
    Mon problème, c'est que lorsque je presse la touche entrée, je rentre bien dans ma fonction (en témoigne un alert placé au début de celle ci), mais je suis aussitôt redirigé vers l'action struts de mon form...

    Comment pourrais-je désactiver la validation du formulaire sur la touche Entrée?

    Voici le code de ma fonction JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function keypress(evenement) {
        alert(evenement.keyCode);
        if(evenement.keyCode == 13) {
            alert("TOUCHE ENTER");
            //traitement spécifique
        }
    }

    ainsi que le code de ma JSP :
    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
     
    ...
     
    <nested:form action="/MAJ_Page.do">
     
    	<layout:tabs width="98%" selectedTabKeyName="tab">   
    		<layout:tab bundle="bundle" key="onglet1" href="javascript:goTo('/Page.do?tab=onglet1', '_self');">
    			<%@ include file="/jsp/jsp_onglet1.jsp"%>
    		</layout:tab>   
     
    		<layout:tab bundle="bundle" key="onglet2" href="javascript:goTo('/Page.do?tab=onglet2', '_self');">   
    			<%@ include file="/jsp/jsp_onglet2.jsp"%>
    		</layout:tab>
     
    		<layout:tab bundle="bundle" key="onglet3" href="javascript:goTo('/Page.do?tab=onglet3', '_self');">   
    			<%@ include file="/jsp/jsp_onglet3.jsp"%>
    		</layout:tab>
     
    		<br/>
     
    		<table width="100%" border="0">
    			<tr align="center">
    				<td align="center">
    					<html:button property="_valider" onclick="javascript:validFormulaire('/MAJ_Page.do', '_self');">
    						<bean:message key="btn_valider" bundle="boutons"/>
    					</html:button>
    				</td>
     
    				<td align="center">
    					<html:button property="_annuler" onclick="goTo('/Menu.do');">
    						<bean:message key="btn_annuler" bundle="boutons"/>
    					</html:button>
    				</td>
    			</tr>
    		</table>
    	</layout:tabs> 
    </nested:form>
     
    ...
    Merci d'avance pour votre aide

    PS : J'ai même retiré carrément le bouton Valider de la page, la touche Entrée provoque quand même la validation du formulaire, donc c'est bien l'action du form qui est appelée

  2. #2
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 36
    Par défaut
    La touche entrée valide le formulaire où se trouve le champ qui a le focus, bouton de soumission ou non. Pour éviter ça, il faut que l'évènement onkeypress renvoie false. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function keypress(evenement) {
        alert(evenement.keyCode);
        if(evenement.keyCode == 13) {
            return false;
        }
    }
    Et sur ton formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <nested:form action="/MAJ_Page.do" onkeypress="return keypress(event)">
    C'est du pur HTML/Javascript, rien à voir avec Struts. Il faudrait peut-être déplacer le sujet vers le forum adapté ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut
    le problème boojum, c'est que onkeypress n'est pas un évènement géré par le nested:form (Message d'erreur : "undefined attribute name onkeypress"), les seuls évènements proposés sont onReset et onSubmit...

  4. #4
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 36
    Par défaut
    J'avais pas noté, j'avoue... Pratique

    Tu peux toujours le mettre individuellement sur tous les champs de ton formulaire, mais ça risque de devenir lourd selon le nombre que tu en as.

    Probablement mieux à long terme : tu fais un petit script JS à la fin de ta page pour récupérer l'élément HTML form et valoriser le onkeypress depuis le script. L'évènement existe bien sur la balise form, c'est juste Struts qui ne le gère pas...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut
    Probablement mieux à long terme : tu fais un petit script JS à la fin de ta page pour récupérer l'élément HTML form et valoriser le onkeypress depuis le script.
    Je t'avoue que là, c'est du chinois pour moi.

  6. #6
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 36
    Par défaut
    Désolé, j'ai été un peu vite.

    Ton <nested:form> dans ta JSP génère une balise <form> dans le HTML. Or, l'attribut onkeypress existe bien sur la balise <form>, c'est juste Struts qui ne le rend pas disponible sur <nested:form>.

    Pour le mettre en place, il va donc falloir l'ajouter en Javascript (JS) sur la balise <form> (puisque tu ne peux pas y accéder directement).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    document.getElementById("identifiant.de.ton.form").onkeypress = function(evenement) {
        //renvoie true pour toute autre touche que Enter
        return (evenement.keyCode != 13);
    }
    Le code doit se trouver en fin de page (après ta balise <form>) pour qu'il puisse la trouver.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut
    ça marche !

    Effectivement, je me demandais bien ce qu'allait pouvoir faire l'ajout d'un <script></script> en bas de jsp, mais ça marche ! La touche Entrée est bloquée pour la validation du formulaire, et mon champ texte avec le onkeypress catche la touche Entrée pour l'action désirée.
    Merci bcp boojum pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Désactiver la validation côté browser sur FF4
    Par pc.bertineau dans le forum Général Conception Web
    Réponses: 13
    Dernier message: 20/11/2011, 13h43
  2. arreter un traitement sur pression d'une touche
    Par scons dans le forum VBA Access
    Réponses: 7
    Dernier message: 16/07/2008, 14h37
  3. Réponses: 1
    Dernier message: 06/12/2007, 11h13
  4. Bouton par défaut sur pression de la touche ENTER
    Par gufra dans le forum GWT et Vaadin
    Réponses: 4
    Dernier message: 15/11/2007, 16h46
  5. [WD9] Validation d'un champ de saisie avec touche entrée
    Par EpOnYmE187 dans le forum WinDev
    Réponses: 11
    Dernier message: 13/01/2006, 15h28

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