PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → JSEvenement - récupérer l'alias de l'objet déclencheur
JSEvenement - récupérer l'alias de l'objet déclencheur
Débuté par Marc Chambeau, 10 juil. 2017 16:04 - 8 réponses
Posté le 10 juillet 2017 - 16:04
Bonjour,

Je cherche à récupérer l'alias de l'objet qui a déclenché un évènement via JSEvenement.

Par exemple, dans le code Onload de la page j'ai...
JSEvénement(ChampModifie, SAI_Niss..Alias, "input")
JSEvénement(ChampModifie, SAI_Passe..Alias, "input")

Comment dans...
PROCEDURE PRIVÉE ChampModifie(pclEvenementJS est un objet dynamique <utile = "information sur l'événement js qui a déclenché la procédure">)

... connaître le champ qui a déclenché l'évènement ?

Cordialement,
Membre enregistré
265 messages
Popularité : +14 (16 votes)
Posté le 10 juillet 2017 - 17:17
Bonjour Marc,

Il y a deux façons de faire.
La première en y dédiant une fonction javascript à laquelle on passe l'objet événement en paramètre.
Quelque chose comme :
function getEventID(event)
{
return event.target.id;
}


Ou bien directement sur l'objet événement dans le WL :
Soit MonAlias  = pclEvenementJS:target:id


Cordialement

--
René MALKA
Posté le 18 juillet 2018 - 16:43
Bonjour, je me permet de relancer le sujet,
j'ai essayé ce que René propose plus haut mais ça ne fonctionne pas,
ayant essayé un peu tout j'ai pu constater que la variable pclEvénementJS contient [object MouseEvent] et que pclEvénementJS:target contient [object HTMLTableCellElement] mais pclEvénémentJS:target;id ne contient rien.
Est ce que quelqu'un saurait donc comme récupérer l'alias sur lequel l'input déclenche l'événement dans le code de le procédure en question ?
Merci d'avance
Sylvain(en PLS)
Membre enregistré
265 messages
Popularité : +14 (16 votes)
Posté le 18 juillet 2018 - 18:35
Bonjour Sylvain,

Je viens de vérifier ce que j'ai proposé, et cela fonctionne toujours plutôt bien !.
Vérifié sous WB en version 21, 22 et 23.

Mais si ce n'est pas le cas de votre côté voici ce que je propose :
- Dans la fonction JSEvénement, à <Objet cible> indiquez toujours son alias, par exemple SAI_MonChamp..Alias, ainsi, quelque soit les paramètres de compilation de votre projet vous êtes sûr que cela marchera.
- Je vous invite à créer une fonction JavaScript, pourquoi pas globale au projet, telle que :
function consoleLog(obj)
{
        console.log(obj);
}


- Ensuite, dans la procédure appelée par JSEvénement, ajouter ceci :
consoleLog(pclEvenementJS)


- Cela va vous permettre de récupérer l'événement dans la console du navigateur avec toutes ses composantes :
MouseEvent
GlobalesNavigateur.js?400006211cd47:4 
FocusEvent {isTrusted: true, relatedTarget: null, view: Window, detail: 0, sourceCapabilities: InputDeviceCapabilities, …}
bubbles:false
cancelBubble:false
cancelable:false
composed:true
currentTarget:null
defaultPrevented:false
detail:0
eventPhase:0
isTrusted:true
path:(28) [input#A2.l-1.A2.padding.webdevclass-riche, td#tzA2.valignmiddle, tr, tbody, table, li, ul.wbLibChamp.wbLibChampA2, td, tr, tbody, table#czA2, td, tr, tbody, table, div.pos4, div.pos3, div.pos2, div#page.clearfix.pos1, td, tr, tbody, table, form.ancragecenter, body, html.htmlstd.html5, document, Window]
relatedTarget:null
returnValue:true
sourceCapabilities:InputDeviceCapabilities {firesTouchEvents: false}
srcElement:input#A2.l-1.A2.padding.webdevclass-riche
target:input#A2.l-1.A2.padding.webdevclass-riche
timeStamp:46345.19999999975
type:"focus"
view:Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
which:0
__proto__:FocusEvent


Vous verrez que l'id est bien dans target ;)

Cordialement

--
René MALKA
Posté le 19 juillet 2018 - 11:14
Bonjour René,
Tout d'abord je vous remercie pour votre réponse immédiate
J'ai d'abord essayé ce que vous avez proposé et rien n'avait changé, par curiosité j'ai testé votre méthode sur un autre champ (un champ de saisie) et cette fois cela a marché parfaitement, votre méthode marche donc très bien et mon problème viens donc surement du type de mon champ (un superchamp)et pas de target:id comme je le pensais
je vous remercie encore pour tout
Sylvain
Membre enregistré
265 messages
Popularité : +14 (16 votes)
Posté le 19 juillet 2018 - 12:17
Bonjour Sébastien,

Je n'avais pas compris votre problème et maintenant c'est bien plus clair !

Un Super Champ est un objet PC-SOFT, une construction bien pratique parfois, mais ce n'est pas un objet HTML !
Seuls les objets HTML peuvent avoir un ID
Voilà d'où vient votre erreur ;)

Cordialement

--
René MALKA
Posté le 19 juillet 2018 - 13:48
Tout s'explique donc...
Sauriez vous s'il est donc possible de récupérer l'alias d'un superChamp dans ce cas de figure( dans la procédure appelée par JSÉvénement) par un quelconque moyen détourné qui ne passe pas par l'appel à ID ?
Encore une fois merci pour toutes les informations
Membre enregistré
265 messages
Popularité : +14 (16 votes)
Posté le 19 juillet 2018 - 15:43
Sylvain (et non Sébastien désolé),

Le super champ est une construction fonctionnelle de l'éditeur de pages.
Ensuite, le générateur de contenu le transforme en code et objets HTML pour qu'un navigateur puisse l'afficher.
En conséquence tout dépend de quels objets le super champ est constitué.
Comme ce sont forcément des objet HTML il y a toutes les chances pour que vous puissiez les manipuler comme le reste en JS.
Maintenant il vous faut trouver le moyen de désigner les objets cibles à l'intérieur.
Je pense que c'est comme tout le reste dans WD-WB, c'est la notation objet qui le permet.
Par exemple : MonSuperChamp.SAI_MaSaisie..Alias

Cordialement

--
René MALKA
Posté le 19 juillet 2018 - 16:25
Très bien, je vais chercher de ce côté là,
je vous remercie encore pour tout René.