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 NULL et select bloqué


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Par défaut getElementById NULL et select bloqué
    Bien le bonjour, pris de désespoir je viens à vous!
    J'ai un code qui marche absolument parfaitement sur mozilla mais internet explorer c'est bug sur bug. J'en ai déjà résolu mais là je calle sévère...

    C'est une liste déroulante (d'entreprises), quand on choisi un élément alors des checkbox apparaissent (ce sont les contacts correspondants aux entreprises).

    Le tout en javascript et ajax.

    Sous internet explorer quand j'arrive sur la page, la première sélection fonctionne. Et ensuite le select se bloque, impossible de recliquer dessus, je dois actualiser la page...
    Et l'erreur est :

    "'document.getElementById(...)' a la valeur Null ou n'est pas un objet."

    Voici mon code javacript/ajax:

    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
    function request(selection,callback){
    	if(selection.value != "" && selection.value != "0" ){
    		document.getElementById("id_form_operation").className = "";
    		var xhr = getXMLHttpRequest();
     
    		xhr.onreadystatechange = function() {
    			if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    				callback(xhr.responseText);
    				document.getElementById("loader").className="";
    				document.getElementById("id_compte_assoc").className="hidden";
    			} else if (xhr.readyState < 4) {
    				document.getElementById("loader").className="hidden";
    				document.getElementById("id_compte_assoc").className="";
    			}
    		};
     
    		var id_compte_assoc = selection.value;
    		xhr.open("GET", "operation_ajout_traitement_ajax.php?id_compte_assoc=" + id_compte_assoc, true);		
    		xhr.send(null);
     
    	}else{
    		document.getElementById("id_tr_assoc_contact").className="back_nom_input hidden";	
    	}
    }
     
    function readData(sData) {
    	document.getElementById("id_tr_assoc_contact").className="back_nom_input";
    	document.getElementById("id_compte_assoc").innerHTML = sData;
    }
    Et mon html/php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <tr class="back_nom_input" id="id_form_operation">
           	<td>Associer  un compte *</td>
           	<td><select name="assoc_compte" id="id_form_assoc_compte" onChange="request(this, readData);">
    	<option value="0">Choisissez un compte</option>
    	<?php // Ici ma boucle qui me crée le select; ?>
    	</select></td>
    </tr>
    <tr class="back_nom_input hidden" id="id_tr_assoc_contact">
            <td>Associer des contacts *</td>
            <td id="id_compte_assoc"><span id="loader"><img src="images/icones/loader.gif" alt="loading" /></span></td>
    </tr>
    Si vous avez une idée
    Merci beaucoup

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Est-ce que tu ne perds pas ton accès au span "loader" (avec IE) ?

    Si oui, alors qu'il est présent dans ton html résultat, je te suggères de ne pas écraser ce span et de mettre l'html résultat dans un nouvel élément, frère à ce span (loader).

    PS: en réalité je suis fort confiant qu'IE ne puisse pas (entre autres) gérer ainsi les éléments rajoutés par innerHTML.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Par défaut
    Je viens de faire des modifs suivant tes conseils ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <tr class="back_nom_input hidden" id="id_tr_assoc_contact">
           	<td>Associer des contacts *</td>
           	<td id="id_compte_assoc_loader"><span id="loader"><img src="images/icones/loader.gif" alt="loading" /></span></td>
            <td id="id_compte_assoc"></td>
    </tr>
    Pensant que ça puisse venir des <tr> et <td> j'ai inclu des div:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <tr class="back_nom_input hidden" id="id_tr_assoc_contact">
            <td>Associer des contacts *</td>
            <td><div id="id_compte_assoc_loader"><span id="loader"><img src="images/icones/loader.gif" alt="loading" /></span></div>
            <div id="id_compte_assoc"></div></td>
    </tr>
    Et dans mon javascript j'ai changé cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    				callback(xhr.responseText);	
    				document.getElementById("id_compte_assoc_loader").className="hidden";
    				document.getElementById("id_compte_assoc").className="";
    			} else if (xhr.readyState < 4) {
    				document.getElementById("id_compte_assoc_loader").className="";
    				document.getElementById("id_compte_assoc").className="hidden";
    }
    Résultat :

    Il n'indique plus l'erreur, mais le formulaire bloque de la même façon...

    EDIT :
    Et même si je remplace mon innerHTML par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var sData = document.createTextNode(sData);
    var cible = document.createElement("p");
    cible.appendChild(sData);
    document.getElementById("id_compte_assoc").appendChild(cible);
    Ça ne fonctionne pas !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Par défaut
    alors personne n'a d'idée?
    Je suis toujours dessus et impossible de résoudre le problème

Discussions similaires

  1. GetElementById null
    Par lambo89 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/07/2011, 21h31
  2. Create table à partir d'un selection bloquée
    Par fatati dans le forum SQL
    Réponses: 6
    Dernier message: 12/08/2010, 17h01
  3. getElementById sur un Select - Incompatiblité avec IE
    Par CristianPop dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/03/2009, 10h09
  4. afficher les champs null de deux tables dans un select
    Par poil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/09/2005, 15h05
  5. Problème de "select" avec des valeurs a null
    Par SchpatziBreizh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2005, 16h08

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