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 :

Javascript - DOM - IE8 - incompabilité


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut Javascript - DOM - IE8 - incompabilité
    Bonjour,

    Je rencontre un problème, pour parcourir les éléments du formulaire avec les objets DOM;
    Je n'arrive pas à exécuter ce script avec IE8, alors que ça marche avec Chrome et FireFox.

    IE8 affiche une erreur javascript permission refusé, j'ai cherché sur Internet, mais je ne trouve pas de réponse qui résou ce problème, j'ai essayé de modifé des paramètres dans l'onglet sécurité de IE, mais cela n'y fait rien.

    Mon système tourne sur XP Pro SP2.

    Voici le script est le 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
     
    <script language="javascript">
    function validerFRM(frmFORM){
    	for (var i = 0; i < frmFORM.elements.length; i++) {
    		document.writeln("<BR>Name " + frmFORM.elements[i].name); 
    	}
    }
     
     
    <form name="frmFicheParticip" method="GET" action="">
    		<!-- champ caché -->
    <input name="validerFORM" type="hidden" value="" />
    <input name="txtTest" type="text" value="" />
    <input name="chkSponsors" type="checkbox" value="val1" />
    <input name="chkSponsors" type="checkbox" value="val2" />
    <input name="chkSponsors" type="checkbox" value="val3" />
     
    <input name="bttSelectSupp" type="button" value="Supprimer" onclick="validerFRM(frmFicheParticip); " /> 						</td>
    </form>
    Est ce quelqu'un aurait la solution, je vous remercie par avance

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir.
    1- N'utilise pas document.write pour créer des éléments
    Comment ajouter des éléments dans une page ?
    Si les contenues à ajouter ne sont que des textes, tu peux utiliser un div et faire un innerHTML.

    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript">
    et n'oublie pas de le fermer.

    A+.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Bonsoir Andry.aime,

    Le code que j'ai posté, c'est juste un test, normallement c'est dans un tableau, et le fichier javascript et dans un fichier js. Mon code fonctionne parfaitement avec un Firefox et Chrome, c'est avec Internet Explorer 8, qui ne fonctionne pas, c'est ça là mon problème, il y a t'il une solution pour contourner cette incompabilité. Est ce que c'est document.write qui va faire que j'ai un message d'internet explorer en javascript et quand je clique sur le point d'exclamation Permission refusé.

    As-tu d'autre suggestion ou quelqu'un à d'autres solutions, merci...

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    Citation Envoyé par BOLARD Voir le message
    Bonsoir Andry.aime,

    Le code que j'ai posté, c'est juste un test, normallement c'est dans un tableau, et le fichier javascript et dans un fichier js. Mon code fonctionne parfaitement avec un Firefox et Chrome, c'est avec Internet Explorer 8, qui ne fonctionne pas, c'est ça là mon problème, il y a t'il une solution pour contourner cette incompabilité. Est ce que c'est document.write qui va faire que j'ai un message d'internet explorer en javascript et quand je clique sur le point d'exclamation Permission refusé.

    As-tu d'autre suggestion ou quelqu'un à d'autres solutions, merci...
    ton code est lui-même un problème, je vais te résumer ce que fait ton code :
    tu parcours les éléments d'un <form> ça ok pas de soucis
    mais pour chaque élément de ce form, tu fais un document.write ou document.writeln. Quand tu fais un document.write.. tu écrases le dom existant par un nouveau DOM, ce qui fait que ton <form> il n'existe plus, va parcourir un élément qui n'existe plus. Donc normal que IE8 t'envoies paitre

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    En effet, c'est le document.write qui est le problème, crée un div et utilise innerHTML.

    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
    <html>
    <head>
    <script type="text/javascript">
    function validerFRM(frmFORM){
        frmFORM.style.display="none";
        for (var i = 0; i < frmFORM.elements.length; i++) {
            document.getElementById('test').innerHTML+="<br />"+ frmFORM.elements[i].name;
        }
    }
     </script>
    </head>
    <body>
     
     
    <form name="frmFicheParticip" method="GET" action="">
            <!-- champ caché -->
    <input name="validerFORM" type="hidden" value="" />
    <input name="txtTest" type="text" value="" />
    <input name="chkSponsors" type="checkbox" value="val1" />
    <input name="chkSponsors" type="checkbox" value="val2" />
    <input name="chkSponsors" type="checkbox" value="val3" />
     
    <input name="bttSelectSupp" type="button" value="Supprimer" onclick="validerFRM(this.form)" />                         
    </form>
    <div id="test"></div>
    </body>
    </html>
    A+.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    OK merci Andry.aime, pour ta réponse, donc je vais faire comme tu as dit, mais en fait, pourquoi ça fonctionne sur FireFox et Chrome et pas sur IE8, peut tu me donner une expliquation, pour mieux comprendre la logique. Je commence tous juste avec DOM, uniquement avec les l'objet document, windows, getElementById.... et ces méthodes basics. Je me suis pas encore penché sur innerHTML, mais je vais étudier ça. Déjà je vais tester ta solution. Ce pendant j'ai mis mon sujet sur d'autres forums, et on me dit que mon script est correcte, ça serait plutôt un problème de paramètrage de mon navigateur. Je te tiens au courant du test. Et si ça marche, je mettrait problème résolut.

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

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    parcequ'il sont plus sioux que IE

    en fait FF et Webkit voyant que tu ajoute un élément avec write ne vont pas ajouter le texte dans le source html et régénérer la page
    mais juste généré le HTML à ajouter
    en faire un segment DOM et chercher dans le source le point d'insertion
    il vont alors retrouver dans le DOM l'élément correspondant au point d'insertion
    et insérer le segment DOM

    du coup il optimisent le travail à faire et gagne du temps
    petit effet marginal le dom n'est pas entièrement reconstruit (mais la norme ne dit pas qu'il faut ou pas le reconstruire)

    A+JYT

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Ben merci Andry.aime, pour ton expliquation, j'ai bien compris cette fois. J'ai testé ta solution est tout fonctionne je vais pouvoir continuer mon projet, notamment je voulais vérifier la sélection des cases à coché dynamiques, maintenant que tu m'a apporter une solution je devrais bien m'en sortir. Je met ce sujet résolut. Encore merci, et bonne soirée.

  9. #9
    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
    Citation Envoyé par sekaijin Voir le message
    parcequ'il sont plus sioux que IE

    en fait FF et Webkit voyant que tu ajoute un élément avec write ne vont pas ajouter le texte dans le source html et régénérer la page
    mais juste généré le HTML à ajouter
    en faire un segment DOM et chercher dans le source le point d'insertion
    il vont alors retrouver dans le DOM l'élément correspondant au point d'insertion
    et insérer le segment DOM

    du coup il optimisent le travail à faire et gagne du temps
    petit effet marginal le dom n'est pas entièrement reconstruit (mais la norme ne dit pas qu'il faut ou pas le reconstruire)

    A+JYT
    Je ne suis pas vraiment d'accord... Le comportement de write est conditionné par l'état du document : s'il est "opened" (typiquement en cours de construction), write ajoutera ses paramètres dans le document à l'endroit où il est déclaré, si le document est "closed", il le réouvrira (et donc son contenu sera vidé) et ajoutera le contenu de ses arguments.
    Pour t'en persuader :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <html>
    <head>
        <title>Test write()</title>
        <script type="text/javascript">
            function doWrite(){
                var contenu = prompt('Que voulez-vous écrire ?');
                document.write(contenu);
            }
        </script>
    </head>
    <body>
        <p><button onclick="doWrite();">Ecrire dans le document</button></p>
    </body>
    </html>
    Tu noteras que dans ce cas, l'indicateur de chargement de la page reste actif. En modifiant un peu la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function doWrite(){
        var contenu = prompt('Que voulez-vous écrire ?');
        document.write(contenu);
        document.close();
    }
    ce n'est plus le cas
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Javascript/DOM : createTextNode() et entités
    Par Jherek dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/03/2006, 16h18
  2. Javascript/DOM : problème de formulaire
    Par Jherek dans le forum Général JavaScript
    Réponses: 25
    Dernier message: 14/03/2006, 17h09
  3. [javascript/dom] Récupérer le nombre de lignes d'un tableau
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/02/2006, 11h51
  4. [javascript][dom]msxml 3 et preceding
    Par trent94 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/11/2005, 10h15

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