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}; });
Partager