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 :

getElementById(maVariable).src sous Ie8


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut getElementById(maVariable).src sous Ie8
    Bonsoir
    voila j'ai un pb avec un script,

    je suis dans une boucle et je voudrai récupérer la src de l'image
    j'ai bien essayé avec jquery:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var test = $('#scroller li img').eq(cpt).attr("src")
    mais attr ne fait pas bon ménage avec IE8 ...
    ... sous les autres navigateurs noproblémo

    alors je suis passé en JS

    Quand j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var test = document.getElementById('nb5').src
    ça marche même sous IE8,
    par contre comme je suis dans une boucle je veux pouvoir écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var temp = 'nb'+compteur
    var test = document.getElementById(temp).src
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var test = document.getElementById('nb'+compteur).src
    et là, ça ne marche plus sous IE8

    avez-vous une idée ?
    une alternative ?

    Merciiiiii d'avance

    Patrick

  2. #2
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Difficile de te répondre avec si peu de renseignements...
    Il faudrait que tu montres un peu plus de code et notamment à quoi te sert ta variable test.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci pour ta réponse

    le code est un peu long je vais tenter de décrire

    Il s'agit d'un script qui récupère un element d'un scroller (un li) via AJAX (donc pas vraiment une boucle ... mais il y a quand même une notion de compteur) afin de modifier l'adresse d'une image.
    L'image dans la liste est un petit png de 10ko et je veux le remplacer par sa bonne image. (un chargement lazzy en quelque sorte)

    la valeur de test attendue est: "http://www.domaine.fr/img/monImage.jpg

    Par la suite je modifie cette adresse, elle contient des infos qui me sont indispensables pour la modification.
    Une fois le traitement de la variable test réalisé je modifie le src avec

    document.getElementById('nb'+compteur).src = testModifié

    et là encore ça plante sous ie8 qui ne veut pas "comprendre" ('nb'+compteur)
    ou même une simple variable.
    par contre ici aussi si j'écris
    document.getElementById('nb5').src = testModifié
    Ie8 modifie bien la valeur de l'attribut src de l'image

    j'espère avoir été assez clair, merci

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    ça veut dire quoi "ça marche plus" ? quelle est l'erreur js ?
    comme je l'ai déjà dit dans plusieur post les méthodes get du DOM peuvent retourner null
    le developpeur doit donc s'assurer que l'objet existe avant tout manipulation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var theNB5 = document.getElementById('nb5');
    if (null != theNB5) var test = theNB5.src;
    au vu de tes explications ça resemble beaucoup à un système d'onglet ou quelque chose du genre.
    j'ai pour habitude de dire que la plus part du temp on utilise getElementById alors que de simples référence font l'affaire.

    si tu nous en donne un peu plus on pourra peut être y voir clair.
    A+JYT

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Bonjour, merci pour ta réponse.

    désolé je suis un peu trop laconique =>ça marche pas voulais dire que IE8 évalue l'expression mais retourne nul comme valeur pou la variable, du coup le script bloque

    Et à priori l'élément recherché existe, il est présent dans le débogueur de IE8 (F12)
    Mais ça ressemble bien à quelque chose du type "l'element appelé n'est pas encore dans le dom" (seulement pour IE8 les autres navigateurs renvoient la valeur attendue)

    je ne pense plus que cela vienne du getElementBy(mavariable)
    J'ai testé avec du jquery réputé compatible IE8 et ça ne marche toujours pas
    j'ai aussi testé avec d'autres fonction Java script
    En fait on dirait qu'ie8 n'arrive pas

    Ca pourrait ressembler à un système d'onglet c'est un moyen de ne pas charger toute une collection d'image présente dans un scroller, juste une à la demande


    voici a quoi ressemble le code Jquery qui devrait marcher

    Le JQuery

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function afficher(urlAjax){  
    /* le parmètre provient d'une fonction AJax et renvoie dans tous les cas ce que j'attends*/
    var el = $('#nb'+cpt)
    if(null != el) alert (el) // contre toute attente retourne object
    else alert("encore raté");
    var test = el.html(); // le debogueur affiche pour cette ligne  "Undefined à la valeur Null ou n'est pas un object
     
    // la suite du script
    test = test.replace(/\gris.png/g, urlAjax);
    el.html(test) ;
    // après des fonctions qui teste le chargement mais le pb et que test est null sous IE8
    }
    L' HTML
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ul>
    <li><div id="nb0"><img class="cover" width="1800" height="1200" alt="un déjeuner" src="diaporama/1800/gris.png" style="width: 1663px; height: 1098px;">
    </div></li>
    <li><div id="nb1"><img class="cover" width="1800" height="1200" alt="un déjeuner" src="diaporama/1800/gris.png" style="width: 1663px; height: 1098px;">
    </div></li>
    ...
    </ul>

    Si vous souhaitez plus de code je peux détailler

  6. #6
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    il ne faut pas confondre jQuery et javascript

    la fonction $('#nb'+cpt) ne retourne pas un élément du DOM mais un objet JQuery ce n'est pas du tout la même chose que getElementById qui retourne null ou un DOMElement.

    voici ce que dit la doc de jquery à propos de la fonction $
    Return a collection of matched elements either found in the DOM based on passed argument(s) or created by passing an HTML string.
    jquery te retourne donc une collection éventuellement vide. donc lorsque tu test si la collection existe pas de pb elle existe.

    la méthode html sur cette collection n'est la lecture du HTML d'un DOM élément mais la recherche dans cette collection du premier élément.
    .html()
    Get the HTML contents of the first element in the set of matched elements or set the HTML contents of every matched element.
    Dans ton cas la collection existe mais elle est vide donc l'appel à html() se solde donc par un échec.

    A+JYT
    PS:C'est une des raisons qui font que je n'aime pas JQuery. il donne l'impressions qu'on utilse Javascript et les objet standard du W3C mais en fait il cache beaucoup de chose qui n'aide pas à la compréention de ce qu'on fait. pour tous les développeurs qui commence JS comprenez bien le fonctionnement du DOM et étudiez bien l'API de JQuery avant de vous lancer dans JQuery.

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup pour cette mise à niveau

    Donc l'objet retourné serait vide dans ie8 mais pas dans ie9 et 10 ni firefox opéra chrome ...

    et vu le nombre de fonctions testées (en version jquery ou javascript), il semble bien qu'il n'y ait pas de réponse à ce mystère.

    Je laisse le post ouvert encore une paire de jour au cas où la solution apparaisse dans un de nos cerveaux.

    A+

    Patrick

Discussions similaires

  1. Sript externe src sous Internet Explorer
    Par jimmplan dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/04/2009, 20h21
  2. Mon onmouseover ne fonctionne pas sous IE8
    Par idamarco dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/03/2009, 12h35
  3. outils pour debugger sous ie8
    Par narkhor dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 03/07/2008, 22h49
  4. [DOM] popup modification de src sous Firefox
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 24/06/2007, 21h19
  5. Erreur*: document.getElementById("mavariable") has no properties
    Par camyo dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 09/03/2007, 08h13

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