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 :

[AJAX] Compatibilité firefox / IE6


Sujet :

JavaScript

  1. #1
    Membre averti
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Par défaut [AJAX] Compatibilité firefox / IE6
    Bonjour à tous,

    J'ai développé une interface qui est composé d'un tableau dans lequel un utilisateur peut cocher ou décocher (par des checkbox) des lignes. Lors de l'évènement onClick sur une checkbox un script javascript est appelé :
    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
    36
    function updateMask(obj, profile, object_id, object_type) {
    	// we get the value of "checked" attribut of input
    	var state = obj.checked; 
    	var old_state = 't';
    	if(state) {
    		old_state = 'f';
    	}
    	//alert("state = " + state + " et old_state = " + old_state);
     
    	if(XHR && XHR.readyState != 0) {
    		XHR.abort();
    		delete XHR;
    	}
     
    	XHR = getXMLHTTP();
     
    	if(!XHR) {
    		return false;
    	}
     
    	document.getElementById("waiting").className = "enable";
     
    	url = "?action=ajax_submit_control&profile=" + profile + "&object_id=" + object_id + "&object_type=" + object_type + "&checkstate=" + old_state + ieTrick();
    	XHR.open("GET", url, true);
    	XHR.onreadystatechange = function() {
    		if(XHR.readyState == 4) {
     
    			if(state) obj.setAttribute("checked", false);
    			else obj.setAttribute("checked", true);
    			document.getElementById("waiting").className = "disable";
    		}
    	}
     
    	XHR.send(null);
    	return;
    }
    Ce script me permet de mettre à jour une base de données. Ce script fonctionne sous firefox et IE. Le problème vient après.
    Comme je peux avoir plus de 1000 lignes dans le tableau, j'ai écrit une autre fonction javascript qui permet, lorsqu'on clique sur le lien "select all" de sélectionner toutes les cases non cochées et de les ajouter à la base de données (en appelant le script précédent).
    Et Là j'ai un problème, ca marche sous firefox mais pas sous IE (version 6).
    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
     
    function selectAllByProfile(obj, profile, object_type) {
    	result = confirm("Do you really want to select all items ?");
    	if(result) {
    		id_list = document.getElementsByName("id[]");
    		checkbox_list = document.getElementsByName(profile + "[]");
    		for(i=0; i<checkbox_list.length; i++) {
    			if(! checkbox_list.item(i).checked) {
    				checkbox_list.item(i).setAttribute("checked", true);
    				object_id = id_list.item(i).value;
    				updateMask(checkbox_list.item(i), profile, object_id, object_type);
    			}
    		}
    		return true;
    	}
    	return false;
    }
    Merci pour votre aide.

  2. #2
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    C'est quoi l'erreur exactement? ^^

  3. #3
    Membre averti
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Par défaut
    Ah oui, pardon !
    Sous IE 6 lorsque je clique sur "select all", aucune checkbox n'est cochée et rien n'a été mise à jour dans la base de donnée et pourtant le script est bien exécuté. Ah si une chose bizarre se produit les deux dernières checkbox (ou deux dernières lignes du tableau c'est pareil) sont affichées cochées mais rien dans la BD.

  4. #4
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    T'as essayé d'exécuter ta fonction sur un nombre plus restreint de checkbox?

    J'ai remarqué qu'IE a un comportement hasardeux sur les grandes quantités de donnée, peut être qu'il apprécie pas de faire 1000 fois la même chose ^^

  5. #5
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Regarde aussi peut etre de ce coté .

  6. #6
    Membre averti
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Par défaut
    J'ai regardé le code qu'il utilise dans le lien que tu m'as donné et il me semble que mon code tourne de la meme facon.
    J'ai ajouté le test suivant au début de la fonction updateMask() :
    si navigateur = IE alors l'objet XMLHttprequest = null

    et bien ca marche sauf que maintenant mon message d'attente qui doit s'affiche pendant le traitement puis disparaitre à la fin, ne disparait plus.

    De plus depuis aujourd'hui, en fait, Firefox traite mal le gros (tout est relatif) volume de données. Par moment la réutilisation de XHR échoue (= une requete en écrase une autre) comme sous IE6. Je vais donc me replonger dans la doc pour bien comprendre l'objet XHR et son comportement.

    Mais si quelqu'un a une astuce ... ce serait génial.

Discussions similaires

  1. [1.x] (in)compatibilité entre ie6 et firefox pour les input type text
    Par sab_etudianteBTS dans le forum Symfony
    Réponses: 1
    Dernier message: 07/11/2008, 13h51
  2. Pb de compatibilité Firefox
    Par kiouz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/06/2006, 21h22
  3. [AJAX] AJAX ou Firefox ?
    Par stela86 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/04/2006, 11h32
  4. Compatibilité Firefox et IE !!
    Par Mike91 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/01/2006, 16h47
  5. [FLASH MX2004] [flashvars] Compatibilité Firefox / IE
    Par CUCARACHA dans le forum Flash
    Réponses: 4
    Dernier message: 20/10/2005, 12h03

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