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

Bibliothèques & Frameworks Discussion :

Gestionnaire d'événements [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Points : 26
    Points
    26
    Par défaut Gestionnaire d'événements
    Afin de distinguer au possible le comportement du contenu de ma page HTML, je souhaiterais éviter l'utilisation des attributs "on***" sur les balises et les remplacer par les gestionnaires d'événements que l'on peut notamment utiliser grâce à Prototype.

    Voici le code du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        <form id="formulaire" method="post" action="form">
            <legend>Saisir un commentaire :</legend>
            <fieldset>
                <input type="text" name="id_user" value="13"/><br/>
                <textarea id="textarea1" name="textarea1"></textarea>
                <input type="submit" value="envoyer"/>
            </fieldset>
        </form>
    Côté Javascript, je souhaiterais placer l'événement suivant :
    - au submit du formulaire, executer la fonction comment_add

    Voici actuellement le code .js :
    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
     
    Event.observe('formulaire', 'submit', add_comment('formulaire','textarea1','commentaire'));
    /**
     * add_comment()
     * @param form : form
     * @param comment_field : comment_field id
     * @param comment_list : comment_list id
     */
    function add_comment(form,comment_field,comment_list) {
        // serialize : Create a string with each field value
        var champs = Form.serialize(form);
        Form.disable(form);
     
        // Ajax Request
        var laRequete = new Ajax.Request('comment_add.php',{method: 'post',parameters:champs,
            onSuccess: function() { alert('Requête terminée avec succès.') },
            onFailure: function() { alert('Requête échouée.') }
        });
    }
    comment_field me permettant à terme un focus si le champ n'est pas rempli ainsi qu'une modification de la couleur.

    Bien évidemment ce que j'ai fais ne fonctionne pas (au niveau de event.observe) ^^ Merci de m'éclairer

  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 : 53
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Event.observe(window,'load',chargement);
    function chargement(){
    Event.observe('formulaire', 'submit', add_comment('formulaire','textarea1','commentaire'));
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bon, j'ai un peu revu mon code, mais il subsiste quelques problèmes dont je n'arrive pas à mettre de solutions. Tout d'abord, mon gestionnaire d'événement n'attend pas le submit du formulaire. Dès le chargement de la page, il exécute la fonction bindForm.

    D'autre part, je n'arrive pas à récupérer la réponse générée par la requête pour ensuite en faire une insertion au sein de la page dans ma div "commentaire".

    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
     
    function bindForm(){
        Event.observe($('formulaire'), 'submit', add_comment('formulaire','textarea1','commentaire'));
    }
     
    function add_comment(form,comment_field,comment_list){
     
        var data = Form.serialize(form);
     
        alert(data);
        Form.disable(form);
     
        new Ajax.Request('comment_add.php',{method:'post',parameters:data,
    	onSuccess:function(transport)
    	{
                insertion:Insertion.Bottom(comment_list,transport.responseText);
                Form.disable(form);
            },
            onFailure:function(){
                alert('Un problème est survenu lors du traitement de l\'information.');
                Form.disable(form);
            }
        });
    }
     
    Event.observe(window, 'load', bindForm);
    Et voici le code tel quel dans le fichier comment_add.php :

    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
     
    <?php
    $login = "toto";
    $pass = "caca";
    $serveur = "localhost";
    $database_cnx = "mabase";
    $cnx = mysql_pconnect($serveur, $login, $pass) or die (mysql_error());
     
    mysql_select_db($database_cnx, $cnx);
     
    $sql = "INSERT INTO aj_comment
        (
            id_user,
            contenu_comment
        )VALUES(
            '".$_POST['id_user']."',
            '".$_POST['textarea1']."'
        )";
     
    $Result1 = mysql_query($sql, $cnx) or die(mysql_error());
    ?>
    A l'aide

  4. #4
    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 : 53
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insertion:Insertion.Bottom(comment_list,transport.responseText);
    Attention :
    As of Prototype 1.6, the complete Insertion class has been deprecated in favor of Element#insert.
    ensuite, comment_add.php ne renvoie rien... tu as essayé un test sur responseText (alert(transport.responseText)) ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Formidable Bovino.
    Rah oui forcement ! Ca évolue à une vitesse...

    Pour le fichier .php, j'ai donc rajouté un echo de ma réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "ajoute par".$_POST['id_user']."<p>".$_POST['textarea1']."</p>";
    Maintenant il y a juste le gestionnaire d'événéments qui ne fonctionne toujours pas convenablement.
    Au chargement de la page, paf, il exécute ma fonction d'ajout de commentaire. Et le comble, il y a un refresh de la page quand je click sur submit. Je vais retourner le bouquin d'Ajax.

  6. #6
    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 : 53
    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
    Pour éviter le rechargement :
    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
    function bindForm(){
        Event.observe($('formulaire'), 'submit', add_comment(event,'formulaire','textarea1','commentaire'));
    }
     
    function add_comment(event,form,comment_field,comment_list){
        Event.stop(event);
        var data = Form.serialize(form);
        
        alert(data);
        Form.disable(form);
        
        new Ajax.Request('comment_add.php',{method:'post',parameters:data,
    	onSuccess:function(transport)
    	{
                insertion:Insertion.Bottom(comment_list,transport.responseText);
                Form.disable(form);
            },
            onFailure:function(){
                alert('Un problème est survenu lors du traitement de l\'information.');
                Form.disable(form);
            }
        });
    }
     
    Event.observe(window, 'load', bindForm);
    Pour le lancement au chargement, je ne vois pas d'emblée la raison, je regarde d'un peu plus près...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Pour le rechargement rien à faire "event is not defined"... Pourtant j'avais réussis auparavant à faire une execution sans refresh...

  8. #8
    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 : 53
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function bindForm(){
        Event.observe($('formulaire'), 'submit', add_comment('formulaire','textarea1','commentaire'));
    }
    Devrait le faire, il me semble effectivement que l'argument event est envoyé d'office à la fonction cible...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Pour plus de clarté je me permets de reposter les scripts. A l'heure actuelle après avoir tenté en vain les solutions de Bovino, ça ne fonctionne toujours pas.

    Fichier JS :
    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
    function bindForm(){
        Event.observe($('formulaire'), 'submit', add_comment('formulaire','textarea1','commentaire'));
    }
     
    function add_comment(form,comment_field,comment_list){
        var data = Form.serialize(form);
        Form.disable(form);
     
        new Ajax.Request('comment_add.php',{method:'post',parameters:data,
    	onSuccess:function(transport)
    	{
                alert(transport.responseText);
                Element.insert($(comment_list), {bottom: transport.responseText});
                Form.enable(form);
            },
            onFailure:function(){
                alert('Un problème est survenu lors du traitement de l\'information.');
                Form.enable(form);
            }
        });
    }
     
    Event.observe(window, 'load', bindForm);
    Fichier PHP :
    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
    $login = "toto";
    $pass = "caca";
    $serveur = "localhost";
    $database_cnx = "mabase";
    $cnx = mysql_pconnect($serveur, $login, $pass) or die (mysql_error());
     
    mysql_select_db($database_cnx, $cnx);
     
     
    $sql = "INSERT INTO aj_comment
        (
            id_user,
            contenu_comment
        )VALUES(
            '".$_POST['id_user']."',
            '".$_POST['textarea1']."'
        )";
     
    $Result1 = mysql_query($sql, $cnx) or die(mysql_error());   
    echo "ajoute par".$_POST['id_user']."<p>".$_POST['textarea1']."</p>";
    Formulaire HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        <form id="formulaire" method="post" action="#">
            <legend>Saisir un commentaire :</legend>
            <fieldset>
                <input type="text" id="id_user" name="id_user" value="1"/><br/>
                <textarea id="textarea1" name="textarea1">bonjour</textarea>
                <input type="submit" value="envoyer"/>
            </fieldset>
        </form>

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bon j'ai vraiment l'impression que c'est cette histoire d'event qui bloque le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function bindForm(){
        Event.observe('formulaire', 'submit',aSubmit);
    }
     
    function aSubmit(e){
        Event.stop(e);
        alert('submit');
    }
     
    Event.observe(window, 'load', bindForm);
    Ce script fonctionne sans refresh. Suis-je condamné à respecter les mêmes noms de champs et le même nom de formulaire ? N'est-il pas possible d'avoir une fonction dans laquelle on peut passer ses paramètres.

    Merci de m'éclairer.

  11. #11
    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 : 53
    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
    Essaye de faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function bindForm(){
        Event.observe($('bouton'), 'click', add_comment('formulaire','textarea1','commentaire'));
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form id="formulaire" method="post" action="#">
            <legend>Saisir un commentaire :</legend>
            <fieldset>
                <input type="text" id="id_user" name="id_user" value="1"/><br/>
                <textarea id="textarea1" name="textarea1">bonjour</textarea>
                <input type="button" id="bouton" value="envoyer"/>
            </fieldset>
        </form>
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    En fin de compte, j'ai pu le gérer sans faire passer de paramètres dans la fonction add_comment présente dans bindForm(). Je verrais par la suite si c'est adéquate comme solution.

    En attendant merci du coup de main Bovino.

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

Discussions similaires

  1. Maj dynamique d'un gestionnaire d'événement
    Par Herode dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 10h15
  2. Gestionnaire d'évènements pour les fichiers sur disque
    Par chourmo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/03/2006, 16h18
  3. Gestionnaire d'événements pour la souris en assembleur
    Par bassim dans le forum Assembleur
    Réponses: 2
    Dernier message: 09/12/2005, 23h45
  4. [VBA] Gestionnaire d'évènement commun
    Par Neilos dans le forum Access
    Réponses: 11
    Dernier message: 14/06/2005, 11h18
  5. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 20h14

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