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

VBScript Discussion :

[HTA] Définir event dynamiquement


Sujet :

VBScript

  1. #1
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut [HTA] Définir event dynamiquement
    Bonjour à tous,

    Je pêche un peu sur le fait d'ajouter dynamiquement un event sur un input text.

    Au départ dans mon code HTML l'input est déjà défini avec un event onclick :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" style="width:250px;" id="MachineObjectOU" name="MachineObjectOU" onclick="javascript:TogglePopupBox('MachineObjectOU');" onkeydown="javascript:TogglePopupBox('MachineObjectOU');" onpropertychange="javascript:ValidateOU();" />
    Cela fonctionne très bien.

    Maintenant j'ai besoin à un moment donné de virer l'event dans un cas précis, mais aussi de le remettre dans un autre cas.

    Donc pour le virer je fais tout simplement côté VBS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MachineObjectOU.onclick = ""
    Mais c'est pour le redéfinir que ça se corse
    J'ai essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MachineObjectOU.onclick = "TogglePopupBox('MachineObjectOU');"
    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MachineObjectOU.onclick = "function onclick() { TogglePopupBox('MachineObjectOU'); }"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MachineObjectOU.onclick = "function () { TogglePopupBox('MachineObjectOU'); }"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MachineObjectOU.onclick = "javascript:function () { TogglePopupBox('MachineObjectOU'); }"
    Et ça ne fonctionne pas...

    J'ai trouvé ceci qui donne satisfaction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim sOUClick
    If sOUClick = "" Then
        Set sOUClick = MachineObjectOU.onclick
    End If
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MachineObjectOU.onclick = sOUClick
    Mais bon cela oblige d'utiliser une var de stockage ce qui n'est pas top

    Ce qui m'étonne aussi c'est que VarType de sOUClick donne 8 donc c'est bien un string qui contient function onclick() { TogglePopupBox('MachineObjectOU'); }
    Mais si je ne fais pas de Set à l'enregistrement et à la redéfinition de l'event, cela ne fonctionne pas....
    Ce n'est pourtant pas un object.

    Si quelqu'un à une idée je suis preneur

    Merci à vous !
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    si je comprends bien ton imput a un event et tu veux qu'il soit supprimé a un momment donné c'est bien ca
    si c'est oui il faut sortir du code inline"onclick=...." et passer par addeventlistener ou attachevent(IE 7,8)au load du document mais cela c'est en JavaScript en vbs je sais pas. je suppose que oui on doit pouvoir le faire

    javascript
    ajouter un evenement
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("toto").addEventListener("click",nom de la fonction ,false);
    suprimer l'evenement
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var myinput=document.getElementsById("toto")
    myinput.removeEventListener("click",nom de la fonction", false);
    je suppose que la syntaxe doit a peine changer en vbs ( je n'ai jamais essayé) mais on doit pouvoir

    voila voila

    si ton Hta fonctionnera en mode IE old(7,8,et lme 9) des fois on utilisera attachevents mais a la place de "click" on mettre "onclick"
    je te laisse faire tes recherche sur ce point
    pour te familiariser avec ca
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Merci Patrick pour ta réponse.
    Mais mon problème est que dans l'exemple indiqué ma fonction qui est dans le onclick au départ prends un paramétre.
    Hors avec le addEvent justement on ne peux pas le définir.

    D'où mon passage par un objet de stockage pour le moment.
    Mais j'aimerais plus propre
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re

    je vais potasser cela pour les arguments
    en attendant dans un hta le addeventlistener n'a pas lair de fonctionner on le fait en mode vieux internet alors avec attachevent et detachevent c'est tou

    voila un exemple simple
    2 input bouton faisant la bascule de l'un a l'autre et vis et versa
    quand tu clique sur 1 des deux tu ne peux plus cliquer sur celui ci tu est obligé de cliquer sur l'autre pour lui rendre son événement
    copie dans un text et sauve en .hta

    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
    <!doctype html>
    <html lang="fr">
     
    <head>
     <meta charset="utf-8">
      <title>patrick exemple pour cerede2000 </title>
    <meta http-equiv="X-UA-Compatible" content="IE=10"> 
    <script  type= "text/javascript">
    function ajoutev(){
    var b1=document.getElementById("B1");
    var b2=document.getElementById("B2");
    //b1.addEventListener('Click',fonct1,false);// fonctionne pas en hta donc 
    //b2.addEventListener('Click',fonct2,false);
    //on le fait a l'ancienne 
    b1.attachEvent("onclick", fonct1);
    b2.attachEvent("onclick", fonct2);
    }
    function fonct1(event){
    alert("bouton1 si tu reclique dessus il marchera pas il faut recliquer le bouton 2");
    document.getElementById("B1").detachEvent('onclick',fonct1);
    document.getElementById("B2").attachEvent('onclick',fonct2);
    }
    function fonct2(event){
    alert("bouton2 si tu reclique dessus il marchera pas il faut recliquer le bouton 1");
    document.getElementById("B2").detachEvent('onclick',fonct2);
    document.getElementById("B1").attachEvent('onclick',fonct1);
    }
     
    </script> 
    </head>
    <body>
    <input type="button" id="B1" value="bouton1" />
    <input type="button" id="B2" value="bouton2" />
    <script> ajoutev(); </script>
    </body> 
    </html>
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    je ne vois pas ou est ton soucis

    tu a plusieurs évènement qui appel la même fonction utilise alors event.target dans ta fonction
    et au lieu de mettre tes appels online, tu attachevent et detachevent pour supprimer les evenement
    non je vois vraiment pas

    je t'ai montré comment on attribuais une fonction a un évènement dynamiquement
    reste dans ta fonction avec event target dans if else ou même un switch en javascript qui correspond a un select case en vba

    donc recherche sur event.target ,switch

    si tu met tes evenement online(dans le code html) tu ne peut les supprimer


    et même j'ai fait une recherche tout a l'heure et j'ai trouvé des exemples de addevenlistener avec arguments

    au lieu du nom de la fonction en 2d position dans le code tu met un truc du genre
    addevenlistener(evenement,function(){nomdetafoncton(arguments)},false);

    a traduire en vbs bien entendu quoi que le hta reçois très bien le javascript
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    allez exemple avec attachevent + arguments
    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
    <!doctype html>
    <html lang="fr">
     
    <head>
     <meta charset="utf-8">
      <title>patrick WYSIWYG html </title>
    <meta http-equiv="X-UA-Compatible" content="IE=10"> 
    <script  type= "text/javascript">
    function ajoutev(){
    document.getElementById("MachineObjectOU").attachEvent("onclick",function() { return TogglePopupBox('clickMachineObjectOU'); });   
    document.getElementById("MachineObjectOU").attachEvent("onkeydown",function() { return TogglePopupBox('keydownMachineObjectOU'); });   
    document.getElementById("MachineObjectOU").attachEvent("onpropertychange",function() { return ValidateOU('propchangeMachineObjectOU'); });   
    }
    function TogglePopupBox(argument){
    alert(argument);
    }
    function ValidateOU(argument){
    alert(argument);
    }
    </script> 
    </head>
    <body>
    <input type="text" style="width:250px;" id="MachineObjectOU" name="MachineObjectOU" />
    <script> ajoutev(); </script>
    </body> 
    </html>
    regarde bien les 3 lignes dans ajoutev
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Great !!!
    En fait il faut mettre function() en direct et pas en string
    Tip top, je vais tester ça !

    Merci Patrick
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    non c'est pas tout a fait ca

    en fait normalement on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.attachevent(evenement,nom de la fonction)
    pour le faire avec des arguments il faut faire comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.attachevent(evenement,function(){nom de la fonction(argument1,argument2,etc..);})
    en gros une fonction dans une fonction

    en JavaScript c'est ce que l'on appelle les fonctions anonymes

    dans le cas présent la fonction anonyme function(){vrai fonction.}fait appel a la vrai fonction

    ces fonctions anonyme peuvent acceuilir du code aussi

    exemple sinmple qui me sert très souvent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.attachevent(evenement,function(){alert("Bonjour Cérédé 2000");})
    autrement dit tout le code qui se trouve dans la vrai fonction peut etre placé dans la fonction anonyme

    voila maintenant tu sais comment on attribue une fonction a un évènement

    pour le supprimer c'est comme la méthode simple de attachevent mais sans le arguments

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.detachevent(évènement,vrai nom de la fonction);
    en ce qui concerne ce point j'ai tout dis

    après il y a plus complexe mais déjà métrise cela et on verra
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Je maîtrise bien ce concept en JS, c'est le VBS qui me posait question, je pensais pas qu'on pouvait coller du code JS like direct dedans.

    Qu'entends tu par plus complexe ?
    Ca m'interesse aussi

    EDIT :
    Par contre je n'avais pas fait attention mais ça ne fonctionne pas côté VBS !
    C'est bien là mon problème.....
    J'ai absolument besoin de le faire côté VBS et non pas côté JS.

    Donc pour le moment seule ma méthode de stocker l'event existant dans une variable et de le restaurer par la suite fonctionne
    Il doit bien y avoir un moyen de faire ça en VBS non ?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Je maîtrise bien ce concept en JS, c'est le VBS qui me posait question, je pensais pas qu'on pouvait coller du code JS like direct dedans.

    Qu'entends tu par plus complexe ?
    Ca m'intéresse aussi
    il y a les classe aussi et on peut attribuer une classe a une série d'élément avec addeventlistener

    bon reprenons des le départ car vu l'exemple j'ai l'impression que cette variable est fixe puisque entre guillemets dans l'appel
    alors sincèrement pourquoi ne pas se servir de l'attribue data d'un élément comme ca ca bouge plus

    maintenant si cette variable doit évoluer alors c'est plus complexe sans "var=..."en JS ou "dim myvar..."en vbs

    je vais essayer de convertir le code attachevent en vbs on va voir si c'est possible


    j'oubliais aussi on peut revenir en DOM1 en vbs je crois que l'on peut modifier les evenement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element.onclick=function(){tafonction.......};
    changeable a volonté

    mais dans ce cas dans le code html des éléments tu verra les appels comme si tu les avais écrit en dur
    je vais essayer de retrouver mes vieux hta avant je fonctionnais comme ca mais maintenant je préfère largement le js plus puissant et plus malléable même dans un hta
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 185
    Points
    17 185
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    ..............
    EDIT :
    Par contre je n'avais pas fait attention mais ça ne fonctionne pas côté VBS !
    C'est bien là mon problème.....
    J'ai absolument besoin de le faire côté VBS et non pas côté JS.
    ...........
    Peut être [HTA] Ajout/suppression dynamique d'images pourrait il t'inspirer (lignes 47 48 et 49).
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour céréeé 2000

    bon j'ai pris ma machine a voyager dans le temps et je suis aller voir au temps ou les homme marchait encore a quatre pattes

    voila un exemple d'attribution d'évènement strictement en vbs (pas de JS) comme tu peux le voir c'est affreux

    et entre nous rien ne t'empêche d'avoir du JS et du VBS dans ton HTA c'est d'ailleurss encore le cas pour pas mal des miens dont je n'ai pas pris le temps de les mettre a jour

    mais bon !! voila préhistoriqement le code en vbs
    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
    <HTML>
    <HEAD>
    <TITLE>A document with SCRIPT</TITLE>
    <META http-equiv="Content-Script-Type" content="text/tcl">
    <script type="text/vbscript" >
    function createevenement()
    document.getElementById("text1").onclick = GetRef("sub1")
    msgbox "evenement créé!!"
    end function 
    sub sub1()
    document.getElementById("text1").onclick = GetRef("sub2")
    msgbox "la sub 1 a été apelée" 
    end sub
    sub sub2()
    document.getElementById("text1").onclick = GetRef("sub1")
    msgbox "la sub2 a été apelée" 
    end sub
    </script> 
    </head>
    <body onload="createevenement"> 
    <input type="text" style="width:250px;" id="text1"  />
     
    </body> 
    </html>
    le passage d'argument a la sub est tellement complexe avec cette écriture que je te le propose même pas, même moi

    je le comprends plus tellement hahahaha

    c'était du temps ou on portait des pantalons a pattes d'eph et des cols jago(a la mike brant)

    dieu merci je sui ne bien plus tard
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    J'utilise déjà le getRef pour des events mais mon problème est toujours le même...
    Les arguments
    Si tu as un code qui permet de le faire je suis totalement preneur !
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re

    mais je me pose toujours la question vu ton enoncé de départ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" style="width:250px;" id="MachineObjectOU" name="MachineObjectOU" onclick="javascript:TogglePopupBox('MachineObjectOU');" onkeydown="javascript:TogglePopupBox('MachineObjectOU');" onpropertychange="javascript:ValidateOU();" />
    des paramètres entre guillemets ne change pas alors pourquoi pas simplement faire 2 sub

    TogglePopupBox
    et
    ValidateOU
    puisque l'argument et le même et fixe pour le prp..change et le click
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ils ne changent pas dans l'exemple mais c'est un popup dynamique et donc mon paramètre est l'id de l'input concerné.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    et alors????
    to id est injecté en dur alors a quoi ca sert?????
    autant utiliser le id en dur dans la sub ma fois !!!?????

    au lieu de


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub truc (argument_ID)
    msgbox argument_ID
    end sub
    faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub truc ()
    arrgument_ID="toto"
    msgbox argument_ID
    end sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Le truc c'est que j'ai plusieurs éléments qui appellent cette fonction.
    Et qui passe en paramètre un input text qui doit être la target de ma popup box.
    Un bouton, un label.....

    Donc problème
    L'idée de cette fonction justement c'est qu'elle affiche ou cache le popup en prenant en paramètre l'élément destination sous lequel sera affiché le popup.

    Donc je ne peux pas faire simplement avec event.source
    Il me faut bien un paramétre à passer à la fonction.

    Ce que je ne comprends pas c'est pourquoi lorsqu'on sauvegarde dans un variable et qu'on restaure ça fonctionne.
    Mais pas quand on définit stricto sinco la même valeur en string alors que c'est bien du string qui est sauvegarde, ça ne fonctionne pas....
    Il y a bien un truc par là :S
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    tu es testard hein!!!

    si je te dis que tu n'est pas obligé de mettre une variable dans l'appel en argument c'est que tu n'est pas obligé

    tiens teste ce hta

    et en plus on lui change la fonction dynamiquement a chaque click c'est ce que tu voulais non
    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
    <HTML>
    <HEAD>
    <TITLE>A document with SCRIPT</TITLE>
    <META http-equiv="Content-Script-Type" content="text/tcl">
    <script type="text/vbscript" >
    function createevenement()
    document.getElementById("text1").onclick = GetRef("sub1")
    document.getElementById("text2").onclick = GetRef("sub1")
    document.getElementById("text3").onclick = GetRef("sub1")
    msgbox "evenement créé!!"
    end function 
    sub sub1()
    obj= document.activeElement.id
    msgbox "la sub 1 a été apelée par le bouton " &  obj
    document.getElementById("text1").onclick = GetRef("sub2")
    document.getElementById("text2").onclick = GetRef("sub2")
    document.getElementById("text3").onclick = GetRef("sub2")
    end sub
    sub sub2()
    obj= document.activeElement.id
    msgbox "la sub 2 a été apelée par le bouton " &  obj
    document.getElementById("text1").onclick = GetRef("sub1")
    document.getElementById("text2").onclick = GetRef("sub1")
    document.getElementById("text3").onclick = GetRef("sub1")
    end sub
    </script> 
    </head>
    <body onload="createevenement"> 
    <input type="text" style="width:250px;" id="text1"  />
    <input type="text" style="width:250px;" id="text2"  />
    <input type="text" style="width:250px;" id="text3"  />
     
    </body> 
    </html>
    conclusion

    document.activeElement!!!!!! sorti tout droit du HTML5 encore en développement mais suffisant pour ce cas
    voila maintenant tu a en vbs intégral l'attribution dynamique de la fonction et l'argument par le activeElement directement
    on est ok c'est bon??
    edit:

    et si tes librairies ne sont pas a jour ca arrive selon le system et le mode de mise a jour
    tu a ElementFromPoint qui fonctionne très bien en vbs je l'utilise d'ailleurs même en vba si tu te souviens de ma fausse classe control

    je pourrais ajouter qu'il serait facile dans mon exemple que au lieu de changer la fonction au 3 textbox en même temps
    il serait facile de le faire que pour celui qui a été cliqué et cela dans la même sub pour tous

    allez tiens parce que c'est dimanche
    les sub sont attribuées dynamique au click pour les 3 textbox dans la même sub mais séparément et cela avec elementFromPoint
    tout bêtement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <HEAD>
    <TITLE>A document with SCRIPT</TITLE>
    <META http-equiv="Content-Script-Type" content="text/tcl">
    <script type="text/vbscript" >
    ' creation et attribution evenement (click)
    function createevenement()
    document.getElementById("text1").onclick = GetRef("sub1")
    document.getElementById("text2").onclick = GetRef("sub1")
    document.getElementById("text3").onclick = GetRef("sub1")
    msgbox "evenement créé!!"
    end function
    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
    sub sub1()
     x =window.event.clientX:  y = window.event.clientY              ' on determine le point ou se trouve la souris 
    obj= document.elementFromPoint(x,y).id                                ' on capte l'element qui se trouve au point x,y
    msgbox "la sub 1 a été apelée par le bouton " &  obj
    'on attribu l'autre sub a l'element qui vient d'etre cliqué
    document.getElementById(obj).onclick = GetRef("sub2")    'on attribu l'autre sub a l'element qui vient d'etre cliqué
    end sub
    sub sub2()
     x =window.event.clientX:  y = window.event.clientY             ' on determine le point ou se trouve la souris 
    obj= document.elementFromPoint (x,y).id                              ' on capte l'element qui se trouve au point x,y
    msgbox "la sub 2 a été apelée par le bouton " &  obj
    document.getElementById(obj).onclick = GetRef("sub1")   'on attribu l'autre sub a l'element qui vient d'etre cliqué
    end sub
    </script> 
    </head>
    <body onload="createevenement"> 
    <input type="text" style="width:250px;" id="text1"  />
    <input type="text" style="width:250px;" id="text2"  />
    <input type="text" style="width:250px;" id="text3"  />
    
    </body> 
    </html> </html>
    
     


    maintenant on est bon hein !!!
    purée je suis revenu a l'Age de pierre avec ton truc c'est tellement plus facile en JS

    je conclurais que c'est une belle erreur de faire cela en vbs faut pas oublier que le DOM évolue et bientôt on pourra plus gérer ca en VBS
    c'est pour ca que je me suis mis au JS
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  19. #19
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ah !!! Du grand Patrick comme j'aime le retrouver

    Merci, super en effet !

    Poir l'info je fais des wizard MDT et malheureusement pas le choix, c'est du VBS avec de l'html décomposés en deux fichiers exécuter par mshta et point barre...

    Je préfère de loin le JS surtout avec des frame comme JQuery ou Prototyp y a pas photo
    Je n'ai aucun souci avec ces techno web.
    Par contre avec des vieux machins comme HTA qui en plus utilise des vielles lin et un vieux moteur IE.....
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  20. #20
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Reste tout de même un problème (tout petit)

    C'est que l'idée était de n'avoir qu'une seule fonction TogglePopupBox avec en paramètre le nom de l'id sur lequel l'afficher.
    Mais pour autant, j'ai aussi des boutons qui appellent TogglePopupBox avec le nom de l'id d'un autre élément de la page...

    Donc pour ces boutons, on ne peux pas utiliser document.activeElement.id puisque c'est sur un autre éklément qu'on souhaite afficher le popup

    Et dans ce cas, je suis du coup obliger de créé une nouvelle fonction qui gérera le onclick de l'input qui appellera TogglePopupBox avec en paramètre document.activeElement.id

    Une dernière proposition ?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

Discussions similaires

  1. [Débutant] changer event dynamiquement
    Par mapmip dans le forum VB.NET
    Réponses: 4
    Dernier message: 19/07/2011, 20h35
  2. Réponses: 4
    Dernier message: 08/02/2010, 23h10
  3. Réponses: 1
    Dernier message: 05/02/2010, 13h10
  4. définir margin dynamiquement ?
    Par thibotus01 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 22/07/2009, 00h39
  5. Ajouter un event dynamiquement pour iexplorer
    Par infostars dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 31/03/2009, 16h41

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