11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
j'ai un très gros souci sur mon code qui marche bien sur IE, mais plante sur Mozilla.
En effet il s'agit en gros de récupérer le choix d'un utilisateur, l'insérer dans un flux xml
qui est utilisé dans l'autre page. Le problème c'est l'affichage du choix de l'utilisateur et
et la construction du flux. Tout ça marche bien sous IE.
j'ai ajouté dans le code le teste des navigateurs, et j'ai les erreurs au niveau de :
xCrit.documentElement.appendChild ->(voilà ce que j'ai fait : xCrit.appendChild()..)
puis
cell = ligne.insertCell();->(ici j'ai fait cell = ligne.insertCell(0); en incrémentant pour chaque cellule)

mais rien ne s'affiche. Je suppose que l'ajout d'attribut n'est pas pris en compte avec ce navigateur !


Voilà les codes :
a écrit :

<script language="JavaScript">
// création d'un objet xCrit

var tab=new Array(3);
var nbcrit = 0;

/*--
-->Ce code en commentaire marche bien sous IE

var xCrit = new ActiveXObject("MSXML.DomDocument");
xCrit.loadXML("<root />");
--*/

//--test (pour avoir le type de navigateur)

if(window.ActiveXObject){
var xCrit = new ActiveXObject("Microsoft.XMLDOM");
xCrit.loadXML("<root />");

}else if(document.implementation && document.implementation.createDocument){

var xCrit = document.implementation.createDocument("","",null);
xCrit.load("<root />");

}else{

alert("Votre navigateur ne prend pas cette méthode de recherche !");

}


//--fin test

var cptCrit = 0 ;

function Crite(ctype, csigne,cval) {
this.ltype = ctype;
this.signe = csigne;
this.valeur= cval;
}
function ajoutcrite(a,b,c){
tab[nbcrit++] = new Crite(a,b,c);
return true;
}
function ajoutCritere(){


var letype = document.MRB.ltype[document.MRB.ltype.selectedIndex].value;
var titre1 = document.MRB.ltype[document.MRB.ltype.selectedIndex].text;
var lesigne = document.MRB.signe.value;
var lavaleur = document.MRB.valeur.value;

if(isNaN(lavaleur)){
alert("Rentrez une valeur numérique SVP merci !");
document.MRB.valeur.focus();
return false
}

for (var K=0;K < nbcrit;K++)
{
if ((tab[K].ltype == letype) && (tab[K].signe == lesigne) && (tab[K].valeur == lavaleur)){

alert("Vous avez déjà sélectionné ce critère ");

return false ;
}
}


if((letype !="")&&(lesigne !="")&&(lavaleur !="")){


var xNoeud = xCrit.createElement("critere"); // Création du nouveau noeud...

xNoeud.setAttribute("id", ++cptCrit); // ... avec ses attributs
xNoeud.setAttribute("letype", letype);
xNoeud.setAttribute("lsign", lesigne);
xNoeud.setAttribute("laval", lavaleur);

xCrit.documentElement.appendChild(xNoeud); // On l'ajoute dans le XML marche avec IE




// AFFICHAGE : tab1 ici est l'id du champ ou va s'afficher le choix de l'utilisateur

ligne = tab1.insertRow(tab1.rows.length-1);
cell = ligne.insertCell(); //cell = ligne.insertCell(0);
cell.className = "border";
cell.align = "center";

cell.innerText = MRB.ltype.options[MRB.ltype.selectedIndex].text;
cell = ligne.insertCell(); //cell = ligne.insertCell(1);
cell.className = "border";
cell.align = "center";

//cell.innerText = MRB.signe.value;
cell.innerText = MRB.signe.options[MRB.signe.selectedIndex].text;
cell = ligne.insertCell(); //cell = ligne.insertCell(2);
cell.className = "border";
cell.align = "center";

cell.innerText = MRB.valeur.value;
cell = ligne.insertCell(); //cell = ligne.insertCell(3);
cell.className = "border";
cell.align = "center";

ajoutcrite(document.MRB.ltype.options[document.MRB.ltype.selectedIndex].value,document.MRB.signe.value,document.MRB.valeur.value);

cell = ligne.insertCell(); //cell = ligne.insertCell(4);
cell.className = "border";
cell.align = "center";
cell.innerHTML = ["<img align='absmiddle' alt='Supprimer ce critère !' src='../images/supr.gif' border='0' onclick='supCritere(" + cptCrit +");' style='cursor:hand'>"];

if(tab1.rows.length >=1){

//document.MRB.chercher.disabled=false ;
document.getElementById("chercher").disabled=false ;
}


}

}
</script>

Je vous remercie d'avance de votre aide .
Piste : il me semble que xCrit.load("<root />") attend en argument un nom de fichier xml et non une chaine (à moins que les deux fonctionnent ? je n'ai pas vérifié).

Pour parser une chaine, à ma connaissance, seul IE utilise un xmlDoc.loadXML(txt);

Les autres utilisent un objet DOMParser :
var myParser = new DOMParser();
var myDoc = myParser.parseFromString(txt, "text/xml");