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

jQuery Discussion :

Echec en essayant de récupérer en JQuery un événement généré par js


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 145
    Par défaut Echec en essayant de récupérer en JQuery un événement généré par js
    Bonjour,

    J'essaye de faire exécuter un bloc JQuery (sélecteur.function) à partir d'une fonction externe purement js, ceci en utilisant un évènement généré à partir de js qui va être récupéré par JQuery au lieu de l'évènement d'interface lui-même.

    Ce procédé s'apparente à ce que l'on obtenait avec la fonction keyboard() dans divers langages, mais là en visant un sélecteur donné, une famille d'objets donnée.

    Il s'agit donc pouvoir déclencher depuis js global des exécutions prévues dans le block JQ.

    L'idée est d'exécuter un "fireOnThis.dispatchEvent( evObj)" depuis une fonction js global l'élément fireObThis étant normalement récupéré par un sélecteur JQ pour l'évènement evObj.

    Un cas élémentaire est d'avoir un evObj initialisé pour un "click" et un bloc JQ $("id_fireObThis").click (function () {} );
    C'est une manière de transformer par cet "interface" un "onclick=myfunction()" auquel on en touche pas en traitement JQ via myFunction () { ...fireOnThis.dispatchEvent( evObj)...} ;

    Une application est une exécution de saisie de données js pur considérée comme non contrôlée en développement, qui se termine par une validation qui exécute une procédure, (via un onclick() par exemple, qui récupère les données générée purement javascript, procédure et qui se termine par un fireOnThis.dispatchEvent( evObj) ( ou IE .fireOnThis.fireEvent( 'on' + evt, evObj );

    Cela ne semble pas fonctionner :
    - ou bien mon principe est faux mais je ne vois pas pourquoi fireOnThis.dispatchEvent( evObj) serait différent, dans la cas d'un click, d'un click dans l'interface sur l'élément fireOnThis qui lui est bien récupéré et traité par JQ.

    - ou bien je passe à coté d'une condition sur l'objet pour que l'évènement soit bien émis, et là je sèche

    Merci d'avance d'une idée ou d'une critique de l'approche

    Trebly

    Note voici le code détaillé :
    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
     
    /* Prendre en compte les deux manières de générer un évènement : code venant de site ?*/
    function fireEvent(obj, evt){
        var fireOnThis = obj;
        if( document.createEvent ) {
            var evObj = document.createEvent('MouseEvents');
            evObj.initEvent( evt, true, false );
            fireOnThis.dispatchEvent( evObj );
        }
        else if( document.createEventObject ) { //IE
            var evObj = document.createEventObject();
            fireOnThis.fireEvent( 'on' + evt, evObj );
        }
    }
     
    var  curBkm = {};
     
    /* Récupération de données venant d'un panneau de saisie "dont je n'ai pas le contrôle (complet), légèrement adapté pour la présentation */
    var GetBkmValues = function () {
        /* uses common var curBkm = Object(); temporarily data of current Bookmark defined js global being got to communicate */
        curBkm.title= document.getElementById("get_bkm_title").value;
        curBkm.aim= document.getElementById("get_bkm_aim").value;
        curBkm.content=document.getElementById("get_bkm_content").value;
        curBkm.remark= document.getElementById("get_bkm_remark").value;
        /* Note : the set of datas is not ended they will be feed by the event trigger on bkm-dummy_event1 */
        alert ('The values for curBkm has been got, title=\n['+  curBkm.title+'] \naim=\n['+  curBkm.aim+'] \ncontent=\n['+ curBkm.content+'] \nremark= n['+  curBkm.remark+']');
    /* Générer l'événement click sur l'element dont le id est "bkm-validator" */
       $("document").fireEvent(document.getElementById('bkm-validator'),'click'); /*fires click event on element bkm-validator*/
     
    };
     
    ( function( $ ) {
     
    $("#bkm-validator").click( function () {
    /* ...*/
    /* actions to execute here on cur_bkm */
            curBkm.date= array();
            curBkm.date[0]= new Date(Date.now());
            curBkm.type="Text"; 
           /*function defined into JQ */
            set_getbkm_off();
        });
    /* ...*/
           var  set_getbkm_off =function () { .... validation and data save actions when set is ended};
    });

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 145
    Par défaut Solution après pas mal d'efforts, un cas presque totalement classique
    Bonjour,

    Je reviens pour apporter la solution qui rentre dans le cas "classique" : objets non définis lorsque l'instruction est soumise.

    Je ne rentre pas dans les détails.
    La complexité du script (4000 instructions) qui comporte :
    1. Déclarations et traitements à la volée en js pur (environnement de traitements)
    2. Plugins JQuery
    3. fonctions js générales
    4. Blocs JQuery


    Faisait que les objets traités pouvaient ne pas avoir été définis (pb des surclasses d'objets par reférence, de clonages etc.).
    Le traitement ne génère pas d'erreur la plupart du temps.
    Le déboguage qui a été long (pas à pas) a conduit à une réorganisation des blocs.

    In fine tout fonctionne.

    Cordialement

    Trebly

    NB: Je me suis aussi laissé piéger avec le débogger par l'exécution d'une instruction invalide (référence à l'objet inexistant) qui m'a fait sortir du script...
    Dans ce cas les espions JQ ($("#id")) donnent undefined pendant que les getElementById('id') renvoient les objet.
    Fatigue ?

  3. #3
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("document").get(0).fireEvent(document.getElementById('bkm-validator'),'click');
    ?
    sinon en jquery c'est trigger
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. Ajouter le design Jquery à un bouton généré par Javascript
    Par mohamedsghaier dans le forum jQuery
    Réponses: 1
    Dernier message: 12/04/2013, 21h39
  2. Réponses: 10
    Dernier message: 24/09/2010, 10h58
  3. Réponses: 1
    Dernier message: 23/08/2006, 11h07
  4. [Système] récupérer l'HTML généré par ma page PHP
    Par saint-pere dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2005, 10h19
  5. récupérer l'événement "fermeture par la croix" de
    Par hamurielle dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/04/2005, 10h35

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