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

JavaScript Discussion :

portée de Variable


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut portée de Variable
    Bonsoir !

    Je cherche désespérément à faire ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <script>
    function Server_Disabled(kstatus)
    {
    	kstatus.status = 0;
        alert(kstatus.status);
    }
     
    var kstatus = { status:  1};
    document.write('<img src="http://.../public/spacer.gif" border="0" height="0" width="0"  onError="Server_Disabled(kstatus);" />');
     alert(kstatus.status);
    </script>
    Donc j'essaie simplement de mettre le status de la variable globale kstatus à 0 lorsqu'une erreur est survenue pendant le chargement de l'image .

    Mais ça marche pas .. je ne comprends pas pourquoi !
    Pourtant quand j'apelle la fonction toute seule (en dehors du document.write) le champ status est bien changé ! Mais là non ..

    Pourquoi ça marche pas ?
    Est ce que je m'y prends mal peut être?

    Merci d'avance
    Bien cordialement.

  2. #2
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    déjà utiliser document.write() est une erreur à elle seule

    Dans ton code document.write() remplace tout le code HTML par le paramètre de write. Donc au moment où tu appelles cette méthode la fonction
    Server_Disabled n'existe plus !

    Ensuite ce n'est pas parce que javascript est permissif qu'il faut faire n'importe quoi :
    pourquoi déclarer ton objet kstatus après la création de ta fonction ?


    Voici donc quelque chose de propre :
    Code javascript : 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
     
    var kstatus = new Object();
    function Server_Disabled(kstatus)
    {
    	kstatus.status = 0;
        alert(kstatus.status);
    }
     
    function loadImg()
    {
    	var myImg;
     
    	kstatus.status = 1;
     
    	myImg = document.createElement("img");
    	myImg.src="images/monImage.jpg";	
    	myImg.onerror = function(){Server_Disabled(kstatus)};
    	document.body.appendChild(myImg);
    }

    puis ton code HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="loadImg()">
    appelle loadImg() lors de l'événment onload.

  3. #3
    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 : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    En complément, tu commets aussi une erreur sur les variables.
    Dans ton code, tu déclares une variable globale kstatus.
    Mais ensuite, en appelant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function Server_Disabled(kstatus)
    tu crées une nouvelle variable kstatus, locale à la fonction et qui n'a rien à voir avec la globale
    Donc appelle ta fonction comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function Server_Disabled()
    et tu auras accès dans ta fonction à la variable globale kstatus.
    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

  4. #4
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par Bovino Voir le message
    En complément, tu commets aussi une erreur sur les variables.
    Dans ton code, tu déclares une variable globale kstatus.
    Mais ensuite, en appelant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function Server_Disabled(kstatus)
    tu crées une nouvelle variable kstatus, locale à la fonction et qui n'a rien à voir avec la globale
    ouh là je n'ai pas vu l'erreur

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut
    Bonsoir et Merci infiniment pour vos réponses super rapide !

    Je suis désolé la syntaxe du javascript me fait défaut. J'étais à mille lieux d'imaginer le conflit avec la variable globale !

    Pour revenir au souci, j'ai oublié de préciser que je n'ai pas le droit de modifier la page dans laquelle je travaille, ainsi je ne suis pas autorisé à toucher la balise body

    Dans tous les cas j'ai effectué plusieurs test avec ce que vous m'avez fourni (un grand merci !) mais la fonction associé au onError n'est exécuté qu'après un léger délai, (Volontairement je STOP apache sur le serveur ou est hebergé l'image ainsi on a presque immédiatement un "unable to connect" : temps de résolution de l'erreur inférieur à une demi seconde)

    En effet si j'exécute le code suivant :
    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
    <img src="http://idclip" border="0" height="0" width="0"  id="test_server"/>// <!-- Test 1 : modification à la volée de l'attribut on error ds une balise img -->
    <script type="text/javascript">
    var kstatus = { status:  1};
    function Server_Disabled()
    {
        alert("mise à 0");
    	kstatus.status = 0;
    }
    function Test_Server(url)// <!-- Test 2, à l'aide de l'objet Image -->
    {
    	var img = new Image();
     
    	img.onerror = function() {Server_Disabled()};
    	img.src = url;	
    }
    function loadImg(url)// <!-- Test 3 , en utilisant un appenchild -->
    {
    	var myImg;
     
    	myImg = document.createElement("img");
    	myImg.src=url;	
    	myImg.onerror = function(){Server_Disabled()};
    	document.body.appendChild(myImg);
    }
     
    Test_Server("http://idkfq"); // <!-- Test 2 --> 
    loadImg("http://iddad"); // <!-- Test 3 -->
    var img_test = document.getElementsById("test_server"); // <!-- Test 1 -->
    img_test.setAttribute("onError", "Server_Disabled();"); // <!-- Test 1 -->
    </script>
    <img src="http://idbeholds" border="0" height="0" width="0"  onError="Server_Disabled();" /> <!-- Test 4, en dur dans une image -->
    <script type="text/javascript">
    for (var i = 0; i < 2; i++)
    alert("Fin du test, statut du serveur à :"+kstatus.status);
    </script>
    Je vois écrit à l'écran que le statut est toujours à 1.
    Puis un millième de seconde après j'ai enfin mes 4 messages "mise à 0" ....
    (Bien évidemment les urls que j'utilise pointent toutes vers une même image hebergé sur mon serveur où apache est coupé)
    Je pensais au début que le Onerror n'était exécuté qu'à la fin de la page (ce qui doit être le cas pour appendchild) mais c'est pas possible pour le test n°4 par exemple (L'appel à onError est en dur dans la balise img)

    Peut être que ce que je recherche, i.e : "être capable d'executer un bout de code Si et seulement si ma fonction Onerror n'est pas appelée" n'est pas possible en javascript pur.



    Cordialement.

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    euh.... tu as regroupé ces 4 tests dans un même fichier ?

    Par ailleurs, cette syntaxe me donne des migraines :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    img_test.setAttribute("onError", "Server_Disabled();");
    pourquoi ne pas faire au plus simple comme dans l'exemple que j'ai posté ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myImg.onerror = function(){Server_Disabled()};
    je n'ai toujours pas compris cet engouement pour les méthodes setAttribute() et getAttribute() en javascript. Il faut vraiment qu'on m'explique....



    En te relisant je n'ai pas bien compris ce que tu cherchais à faire... Puis
    Peut être que ce que je recherche, i.e : "être capable d'executer un bout de code Si et seulement si ma fonction Onerror n'est pas appelée" n'est pas possible en javascript pur.
    Je connais javascript mais le javascript "pur" c'est quoi ?

Discussions similaires

  1. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  2. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  3. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  4. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05
  5. [FLASH MX 2004][XML]portée de variable
    Par marco_ dans le forum Flash
    Réponses: 8
    Dernier message: 29/04/2004, 15h47

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