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 :

[DOM]L'injection d'un formulaire avec innerHTML donne une resultat imcomprehensible ! [Fait]


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut [DOM]L'injection d'un formulaire avec innerHTML donne une resultat imcomprehensible !
    Bonsoir

    Je recontre depuis quelques heures un probleme etrange.
    Quand j'utilise innerHTML pour injecter un form dans un span innerHTML remplace :
    par
    Comme vous vous en doutez le vrais souci c'est que les champs contenus dans la form sont alors totalement ignore ce qui donne dans mon cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    add_file.innerHTML = '<form method="post" action="php/files_explorateur.php" enctype="multipart/form-data" target="ajax_upload_iframe">';
    add_file.innerHTML += '<input type="hidden" name="_type" value="upload">'
    add_file.innerHTML += '<input type="hidden" name="_path" value="' + path_elem.innerHTML + '">'
    add_file.innerHTML += '<img src="images/cancel.png" onclick="close_income_file(\'' + elem + '\')">';
    add_file.innerHTML += '<input type="file" name="file_' + elem + '">';
    add_file.innerHTML += '<input type="submit" value="Envoyer" onclick="get_file_menu(\'' + elem + '\')">';
    add_file.innerHTML += '</form>';
    devient dans FF (code visible dans FireBug)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form target="ajax_upload_iframe" enctype="multipart/form-data" action="php/files_explorateur.php" method="post"/>
    <input type="hidden" value="upload" name="_type"/>
    <input type="hidden" value="/g/" name="_path"/>
    <img onclick="close_income_file('add_file')" src="images/cancel.png"/>
    <input type="file" name="file_add_file"/>
    <input type="submit" onclick="get_file_menu('add_file')" value="Envoyer"/>
    En resume avec ce "bug" les champs se retrouvent hors de la form qui ne contient alors plus rien.
    La form et les inputs sont alors totalement inutiles ...

    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé Avatar de Alt157
    Profil pro
    Inscrit en
    Février 2009
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 143
    Par défaut
    j ai déjà rencontré quelques soucis avec innerHTML donc tu peux essayer de tout mettre dans une variable et de simplement faire innerHTML a la fin (cela m a dejà résolu des problèmes lol ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    maVar = '<form method="post" action="php/files_explorateur.php" enctype="multipart/form-data" target="ajax_upload_iframe">';
    maVar += '<input type="hidden" name="_type" value="upload">'
    maVar += '<input type="hidden" name="_path" value="' + maVar + '">'
    maVar += '<img src="images/cancel.png" onclick="close_income_file(\'' + elem + '\')">';
    maVar += '<input type="file" name="file_' + elem + '">';
    maVar += '<input type="submit" value="Envoyer" onclick="get_file_menu(\'' + elem + '\')">';
    maVar += '</form>';
    add_file.innerHTML = maVar;
    Mais bon innerHtml est déprécié,il est préférable de passer avec le DOM si possible.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut
    Merci beaucoup pour ton aide
    J'ai corrige un truc plus moin dans le code et mis le systeme de variable et ca fonnctionne parfaitement.

    Ceci dit il est possible que ce soit le span non ferme 50 lignes plus bas qui soit a l'origine de l'erreur :p

    Quoi qu'il en soit je prends note pour la DOM mais cette methode me semble un peu complexe surtout quand, comme dans mon cas, il faut faire pleins d'enfants...

    Ca vaut vraiment le coup ? Tu l'utilise souvent ?

  4. #4
    Membre éprouvé Avatar de Alt157
    Profil pro
    Inscrit en
    Février 2009
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 143
    Par défaut
    J'avouerai que cela dépend. Quand c'est un truc assez léger oui. Mais comme pour un projet pro ou je devais faire pleins d'insertions a l'aide d'ajax, je devais insérer pas mal d'infos, des images, etc... d'un seul coup. Là je me suis pas fait chier car il fallait vraiment se casser la tête pour tout afficher convenablement et surtout que niveau de l exécution, nous avons eu l'impression que cela prenait plus de temps donc un petit innerHtml et puis on en parle plus . Mais bon quand on peut éviter de le faire autant essayer. Cela ne fait de mal a personne de respecter les standards

    Sinon la méthode par elle même n'est pas bien complexe, c'est parce que tu n'as pas l'habitude de travailler ainsi, après cela va. il faut juste essayer de trouver un bon tuto

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut
    Ben pour le moment je suis habitue a rien ca fait 10 jours que je fais de l'ajax donc ca va (je suis etudiant)

    Merci pour le tuto je fairais en sorte d'utiliser la DOM le plus possible etant donne que c'est plus propre Mais comme tu le fais remarquer innerHTML a un petit cote pratique que l'on ne peut pas nier !

    Sinon doit y avoir moyen de coder un convertisseur pour generer le code equivalent a un innerHTML respectant la DOM comme ca apres ca devient vachement plus facile de respecter la DOM .

    Ceci etant si la DOM est plus lente ca reste dommage.

  6. #6
    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
    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

  7. #7
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Citation Envoyé par Alt157 Voir le message
    Mais bon innerHtml est déprécié,il est préférable de passer avec le DOM si possible.
    Salut,

    innerHTML n'est pas dépréciée, cette méthode n'est pas standard, c'est différent.

    On évite bien des problèmes avec innerHTML si on évite de l'utiliser en 'lecture',
    donc éviter comme la peste les e.innerHTML += "..."; Cela détruit les anciens
    éléments DOM pour en recréer de nouveaux (on perds les associations d'évènements)

    Si on injecte du contenu frais il y a rarement de problème (sauf pour les lignes
    de tables)

    Ne surtout pas injecter de contenu partiel, en effet, la chaine est "parsée" et
    les éléments non fermés peuvent être complétés (dépends de l'implémentation
    de cette méthode par les navigateurs).

    Sinon, un alternative intéressante à tester ici

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut
    Merci a tous pour votre aide

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/06/2007, 15h33
  2. Réponses: 15
    Dernier message: 21/05/2007, 11h24
  3. Formulaire avec des données pré-remplies
    Par piloupy dans le forum Struts 1
    Réponses: 4
    Dernier message: 15/05/2007, 17h22

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