[Javascript] Firefox <-> Internet Explorer
Résolu/Fermé
A voir également:
- [Javascript] Firefox <-> Internet Explorer
- Internet explorer 11 - Télécharger - Navigateurs
- Internet explorer 8 - Télécharger - Navigateurs
- Ouvrir internet explorer - Guide
- Internet explorer windows 10 - Télécharger - Navigateurs
- Internet explorer 9 - Télécharger - Navigateurs
5 réponses
Bonsoir à toutes et à tous,
Je me permets de relancer le sujet car c'est assez important (comme pour tous).
D'autant plus que votre vas me permettre d'avancer le reste des fonctions.
Cordialement,
crewstyle.
Je me permets de relancer le sujet car c'est assez important (comme pour tous).
D'autant plus que votre vas me permettre d'avancer le reste des fonctions.
Cordialement,
crewstyle.
Bien le bonsoir,
Même si la tâche paraissait infranchissable, j'ai tout de même réussi à franchir le cap et à rendre cette fonction compatible avec Internet Explorer et Netscape Navigator.
Pour ceux qui sont tombés sur ce même genre de problème, je vous mets la même fonction modifiée pour la compatibilité :
Nouveau but : rendre cette foncion compatible avec Opera :P
Bonsoir ;)
Même si la tâche paraissait infranchissable, j'ai tout de même réussi à franchir le cap et à rendre cette fonction compatible avec Internet Explorer et Netscape Navigator.
Pour ceux qui sont tombés sur ce même genre de problème, je vous mets la même fonction modifiée pour la compatibilité :
/* -------------------------------------------------------------------------------------- */ /* ---------------------------------- check_line ------------------------------------ */ /* -------------------------------------------------------------------------------------- */ function check_line(line_id, step_id, form) { if( document.getElementById(line_id) != null ) { var nb_element = document.getElementById(form).elements[line_id].length; var status = document.getElementById(form).elements[step_id].checked; if( nb_element == undefined ) { document.getElementById(line_id).checked = status; } else { for (i = 0; i < nb_element; i++) { document.getElementById(form).elements[line_id][i].checked = status; } } } }
Nouveau but : rendre cette foncion compatible avec Opera :P
Bonsoir ;)
Meme genre de souci, j'aimerai rendre cette fonction compatible avec firefox, mais je ne sais strictement rien sur les méthodes employées pour traiter ce genre de problème ... si quelqu'un a un bon lien ou peux me mettre sur la piste de n'importe quelle manière je l'en remercie d'avance ;)
[code]
function getElementsById(sId)
{
var outArray = new Array();
if(typeof(sId)!='string' || !sId)
{
return outArray;
};
if(document.evaluate)
{
var xpathString = "//*[@id='" + sId.toString() + "']"
var xpathResult = document.evaluate(xpathString, document, null, 0, null);
while ((outArray[outArray.length] = xpathResult.iterateNext())) { }
outArray.pop();
}
else if(document.all)
{
for(var i=0,j=document.all[sId].length;i<j;i+=1){
outArray[i] = document.all[sId][i];}
}else if(document.getElementsByTagName)
{
var aEl = document.getElementsByTagName( '*' );
for(var i=0,j=aEl.length;i<j;i+=1){
if(aEl[i].id == sId )
{
outArray.push(aEl[i]);
};
};
};
/code
[code]
function getElementsById(sId)
{
var outArray = new Array();
if(typeof(sId)!='string' || !sId)
{
return outArray;
};
if(document.evaluate)
{
var xpathString = "//*[@id='" + sId.toString() + "']"
var xpathResult = document.evaluate(xpathString, document, null, 0, null);
while ((outArray[outArray.length] = xpathResult.iterateNext())) { }
outArray.pop();
}
else if(document.all)
{
for(var i=0,j=document.all[sId].length;i<j;i+=1){
outArray[i] = document.all[sId][i];}
}else if(document.getElementsByTagName)
{
var aEl = document.getElementsByTagName( '*' );
for(var i=0,j=aEl.length;i<j;i+=1){
if(aEl[i].id == sId )
{
outArray.push(aEl[i]);
};
};
};
/code
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
20 mai 2008 à 13:39
20 mai 2008 à 13:39
Salut,
Je te propose de mettre ces quelques lignes dans le premier script js que tu load dans ta page :
Cela va te permettre d'uniformiser les fonctions 'getElementById', 'getElementsByName' et 'getElementByTagName' pour IE et FF (et d'autres navigateur mais ce sont les principaux)
Ensuite pour ce qui est du traitement si j'ai bien compris tu veux prendre dans un tableau tous les éléments qui ont un certain identifiant c'est ça ?
Comme les lignes données ci-dessus uniformisent les traitements selon le navigateur, je pense que tu peux garder uniquement le dernier traitement :
Mais tu veux un code qui marche toujours quelque soit le navigateur, tu peux t'appuyer uniquement sur du javascript DOM comme dans cet exemple :
La méthode 'getElementsById' que tu as essayer de mettre en place devrait mieux fonctionner. Je n'ai pas testé le code donc j'ai peut être fait des erreurs de syntaxe, mais logiquement ça devrait fonctionner.
Si tu as le moindre soucis tu sais où me trouver.
PS: rien ne t'empêche aussi de compléter la méthode pour qu'elle prenne en paramètre un élément à partir duquel commencer le traitement :
Bon courage pour la suite.
Je te propose de mettre ces quelques lignes dans le premier script js que tu load dans ta page :
if(!document.getElementById) document.getElementById=function (id) { return eval("document.all."+id); } if(!document.getElementsByName) document.getElementsByName=function (name) { var el=document.all,result=new Array(),j=0; for(var i=0;i<el.length;i++) if(el[i].name.toLowerCase()==name.toLowerCase()) result[j++]=el[i]; return result; } if(!document.getElementsByTagName) document.getElementsByTagName=function (tagName) { var el=document.all,result=new Array(),j=0; for(var i=0;i<el.length;i++) if(el[i].tagName.toLowerCase()==tagName.toLowerCase()) result[j++]=el[i]; return result; }
Cela va te permettre d'uniformiser les fonctions 'getElementById', 'getElementsByName' et 'getElementByTagName' pour IE et FF (et d'autres navigateur mais ce sont les principaux)
Ensuite pour ce qui est du traitement si j'ai bien compris tu veux prendre dans un tableau tous les éléments qui ont un certain identifiant c'est ça ?
Comme les lignes données ci-dessus uniformisent les traitements selon le navigateur, je pense que tu peux garder uniquement le dernier traitement :
var aEl = document.getElementsByTagName( '*' ); for(var i=0,j=aEl.length;i<j;i+=1){ if(aEl[i].id == sId ) { outArray.push(aEl[i]); }; };
Mais tu veux un code qui marche toujours quelque soit le navigateur, tu peux t'appuyer uniquement sur du javascript DOM comme dans cet exemple :
function getElementsById ( _id_ ){ var form = document.forms[0]; // --- Return retrieved elements (can be null) if ( form ) return elementsRetrieved = getElements(form,_id_); } // --- Recursive method to find elements with id equals to the label parameter // --- in a root element function getElements ( _obj_, _label_ ){ var objects = new Array(); var tmpObjects = null; // --- Check if current obj has id equals to the label parameter // --- If so, add it to the list to return if ( _obj_.id != null && _obj_.id == _label_ ) objects.push(_obj_); // --- If current object has children object, roll on these children to search another objects with id equals to the label if ( _obj_.childNodes ){ for ( var i = 0; i < _obj_.childNodes.length; i++ ){ // --- Retrieve return element list tmpObjects = getElements(_obj_.childNodes,_label_); // --- If not null, add it to current list to return if ( tmpObjects != null ){ for ( var j = 0; j < tmpObjects.length; j++ ) objects.push(tmpObjects[j]); } } } // --- Finally return the list of retrieved elements return objects; }
La méthode 'getElementsById' que tu as essayer de mettre en place devrait mieux fonctionner. Je n'ai pas testé le code donc j'ai peut être fait des erreurs de syntaxe, mais logiquement ça devrait fonctionner.
Si tu as le moindre soucis tu sais où me trouver.
PS: rien ne t'empêche aussi de compléter la méthode pour qu'elle prenne en paramètre un élément à partir duquel commencer le traitement :
function getElementsById ( _id_, _startElementId_ ){ var form = document.getElementById(_startElementId_); // --- Return retrieved elements (can be null) if ( form != null ) return elementsRetrieved = getElements(form,_id_); }
Bon courage pour la suite.
a priori la fonction en question a déjà été prévu pour 3 navigateurs différents, puisque la meme action y est présente sous 3 conditions/comportements différentes. Par intuition je dirai que firefox ie et opera fonctionne très bien avec cette fonction.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Même ma réponse est un peu retardée, les autres personnes qui utilise [/ CCM] ils peuvent les utiliser après.
Je pense que l'erreur sur erreur devient de l'attribut checked.
Sur IE : on doit avoir <input type="checkbox" checked="checked"/>
Sur FF : il suffit de mettre <input type="checkbox" "checked" />
Donc, il faut mettre la première qui est acceptée par les deux navigateurs.
Sur Javascript on doit mettre :
ch.setAttribute('checked','checked');
Merci.
Même ma réponse est un peu retardée, les autres personnes qui utilise [/ CCM] ils peuvent les utiliser après.
Je pense que l'erreur sur erreur devient de l'attribut checked.
Sur IE : on doit avoir <input type="checkbox" checked="checked"/>
Sur FF : il suffit de mettre <input type="checkbox" "checked" />
Donc, il faut mettre la première qui est acceptée par les deux navigateurs.
Sur Javascript on doit mettre :
ch.setAttribute('checked','checked');
Merci.