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 :

onbeforeunload et bouton submit


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    pra
    pra est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Par défaut onbeforeunload et bouton submit
    Bonjour à tous,

    Alors voilà, j'ai un petit souci avec beforeunload et l'envoi d'un formulaire. J'ai fais quelque recherche, j'ai trouvé des personnes ayant fait le même style de requête mais je n'ai pas trouvé chaussure à mon pied

    Le contexte
    J'ai un site permettant d'ajouter et modifier des "activités" dans une base de données. Ce site fonctionne avec un système de session. J'ai donc un formulaire permettant la modification d'une activité. Dès l'affichage de l'activité, je la bloque pour que personne d'autre ne puisse la modifier en même temps. Après la modification, l'activité est évidemment débloquée.

    Le souci
    Si l'utilisateur quitte la page (en cliquant sur un lien du menu ou tout simplement quittant le site), l'activité reste malheureusement bloquée. Je sais qu'un timer permettrait de débloquer toutes les activités après un certain temps, mais je recherche la solution optimale.

    Mon approche
    J'ai donc tenté un approche avec onbeforeunload. N'ayant pas accès à la balise <body> dans cette page, je l'utilise de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript">
    	//<![CDATA[
    	window.onbeforeunload = function() { return "Attention"; };
    	//]]>
    </script>
    Le problème se situe alors dans le fait que si l'utilisateur envoie correctement le formulaire, il a aussi ce message d'alerte. Ce qui assez gênant.

    J'ai essayé plusieurs solutions, mais étant néophyte en Javascript, je me sens un peu perdu.

    Quelqu'un aurait une idée pour contourner ce problème? Ou même une autre approche?

    Merci d'avance
    praeto

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    dans la mesure où
    • ondeforeunload ne fonctionne que pour IE
    • tu ne pourras pas gérer les évènements extérieurs (ALT + F4 etc.)
    • le Javascript peut être désactivé
    • l'utilisateur peut laisser l'écran ouvert sans rien y faire (ce qui aura le même résultat)

    à ta place je resterais sur le délai d'expiration de la session serveur ...

    A+

  3. #3
    pra
    pra est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Par défaut
    Merci pour ta réponse si rapide

    Je compte évidemment laisser un timer permettant de faire ça mais bon, si il y a moyen déjà de débloquer l'objet directement après une "sortie" plus conventionnelle (sans Alt-F4).

    onbeforeunload fonctionne avec Firefox. (En tout cas, sur la dernière version)

    Les utilisateurs de mon site (c'est une application privée) auront javascript d'activé, je peux donc m'orienter vers des solutions JS.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    OK, alors pas de problème (au temps pour moi pour le onbeforeunload sous Firefox ).
    Tu n'as qu'à gérer une variable globale "blnBlocage".
    Tu l'initialises à true.

    Sur onbeforunload tu n'à qu'à ajouter un (précédé du message d'avertissement si blnBlocage == true )

    Il faudra prévoir un à chaque point de sortie "autorisé" (sur le onsubmit du form, par ex.)

    A+

  5. #5
    pra
    pra est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Par défaut
    Me revoilà :-)

    J'avais déjà tenté cette approche. Avant de modifier la variable globale, ça me pose déjà problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	var blnBlocage = true;
    	window.onbeforeunload = handle_unload;
     
    	function handle_unload() {
    		if(blnBlocage)
    			alert("Veuillez sortir en annulant le formulaire de modification.");
    		return blnBlocage;
    	}
    Le problème, c'est qu'il affiche toujours en plus de l'alerte la demande faite maison de firefox ou IE (et sur ce dernier il ajoute la valeur de blnBlocage comme message). J'aimerais justement que si le message d'alerte apparaisse, il ne demande pas de 2ème confirmation.

    De plus, même si la valeur est à false (dans le cas où on passerait correctement par l'envoi du formulaire), il affiche quand même cette boite de dialogue demandant si oui ou non la personne peut continuer.

    En gros, j'aimerais que si la personne envoie le formulaire, rien ne s'affiche en plus. Et si elle n'envoie pas correctement les données, qu'elle soit prévenue et soit l'empêcher de continuer (la forcer à cliquer sur le bouton 'annuler', soit utiliser Ajax pour considérer son départ, sans évidemment avoir deux alertes, lui permettant finalement de continuer ou d'annuler (car dans ce cas là, comment faire? Car si elle appuie sur annuler j'aurai déjà considéré son départ du formulaire).

    Encore merci pour votre aide

    praeto

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par pra Voir le message
    Le problème, c'est qu'il affiche toujours en plus de l'alerte la demande faite maison de firefox ou IE (et sur ce dernier il ajoute la valeur de blnBlocage comme message). J'aimerais justement que si le message d'alerte apparaisse, il ne demande pas de 2ème confirmation.
    Ce message du navigateur n'est pas lié au onbeforeunload.

    Il est dû à la manière dont la fenêtre a été ouverte initialement : le nav demande confirmation lorsque JS tente de fermer une fenêtre qui n'avait pas été ouverte via JS.

    Pour l'éviter, il "suffit" de faire en sorte d'ouvrir au départ ta fenêtre via un window.open() ...

    A+

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/03/2005, 11h36
  2. Pas soumettre un bouton submit quand "enter" press
    Par novastar dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/03/2005, 18h16
  3. Transormer un lien bouton submit avec nom et valeur ?
    Par boteha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 20/02/2005, 19h23
  4. Formulaire et bouton submit avec image mapée
    Par dody dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/12/2004, 16h00
  5. Javascript bouton submit
    Par lilou0210 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/11/2004, 11h40

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