Transposer un Javascript pour Mozilla...
Résolu/Fermé
PtitGenie
Messages postés
1
Date d'inscription
jeudi 30 août 2007
Statut
Membre
Dernière intervention
30 août 2007
-
30 août 2007 à 12:19
PtitGenie - 31 août 2007 à 16:42
PtitGenie - 31 août 2007 à 16:42
A voir également:
- Transposer un Javascript pour Mozilla...
- Downloadhelper mozilla - Télécharger - Outils pour navigateurs
- Mozilla thunderbird - Télécharger - Mail
- Telecharger javascript - Télécharger - Langages
- Télécharger mozilla firefox - Télécharger - Navigateurs
- Mozilla backup - Télécharger - Sauvegarde
7 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
30 août 2007 à 12:25
30 août 2007 à 12:25
Tu as oublié de préciser "comme beaucoup de scripts mal écris" ;)
document.all n'existe pas selon les standards du web.
Donc quand tu cherches document.all.cadre, dans ta fonction init(), il faut mettre document.getElementById('cadre')
Courage :)
Xavier
document.all n'existe pas selon les standards du web.
Donc quand tu cherches document.all.cadre, dans ta fonction init(), il faut mettre document.getElementById('cadre')
Courage :)
Xavier
Ah oki ^^ C'est noté merci!
Sinon, pour préciser le problème, apparement (sous Mozilla...) on ne peut déplacer les pièces que verticalement et vers le bas, ce qui fait qu'après plus rien ne marche o_O
Sinon, pour préciser le problème, apparement (sous Mozilla...) on ne peut déplacer les pièces que verticalement et vers le bas, ce qui fait qu'après plus rien ne marche o_O
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
30 août 2007 à 13:55
30 août 2007 à 13:55
Et au besoin, car il me semble que certains navigateur ne prennent pas en compte document.getElementById() malgré les recommandations (je ne sais pas si ca a changé depuis), tu peux toujours copier ces fonctions en début de script (à n'inclure qu'une fois / page) afin dêtre sur que ca fonctionne sur n'importe quoi :
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; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
30 août 2007 à 14:20
30 août 2007 à 14:20
Sinon, je te conseille de débugger ton programme en mettant des alert(''); au niveau de ta fonction move afin de savoir exactement ou tu passe / passe pas dans ton fonction sous mozilla, quelles valeurs sont comparée, etc..
Ainsi tu pourra déterminer s'il s'agit d'un problème algorithmique (a priori non puisque ca fonctionne correctement sous IE), ou d'un probleme d'interprétation de propriété css (je pencherais pour ca), à savoir que certaines propriétés que tu utilise ne sont peut etre pas interprétée de la même facon sous mozilla et IE (mais a priori non puisque tu utilise que style.left et style.top).
En tout cas commencer par changer ton document.all, peut etre mozilla est-il simplement capricieux.
Ainsi tu pourra déterminer s'il s'agit d'un problème algorithmique (a priori non puisque ca fonctionne correctement sous IE), ou d'un probleme d'interprétation de propriété css (je pencherais pour ca), à savoir que certaines propriétés que tu utilise ne sont peut etre pas interprétée de la même facon sous mozilla et IE (mais a priori non puisque tu utilise que style.left et style.top).
En tout cas commencer par changer ton document.all, peut etre mozilla est-il simplement capricieux.
J'ai donc placé des alert!
Comme je le pensais le module qui ne fonctionne pas totalement est move().
Voici sa retranscription avec mes alert :
function move(id)
{
var tampon;
if(document.getElementById(id).style.top==document.getElementById(15).style.top)
{
alert('conditionA');
if((parseInt(document.getElementById(id).style.left)==parseInt(document.getElementById(15).style.left)+75) | (parseInt(document.getElementById(id).style.left)==parseInt(document.getElementById(15).style.left)-75))
{
alert('conditionB');
tampon=document.getElementById(15).style.left;
document.getElementById(15).style.left=document.getElementById(id).style.left;
document.getElementById(id).style.left=tampon;
}
}
else if(document.getElementById(id).style.left==document.getElementById(15).style.left)
{
alert('condition1');
if((parseInt(document.getElementById(id).style.top)==parseInt(document.getElementById(15).style.top)+75) | (parseInt(document.getElementById(id).style.top)==parseInt(document.getElementById(15).style.top)-75))
{
alert('condition2');
tampon=document.getElementById(15).style.top;
document.getElementById(15).style.top=document.getElementById(id).style.top;
document.getElementById(id).style.top=tampon;
}
}
}
Pour expliquer en gros :
C'est un tableau de 16 cases/pièces, mais il n'y a que 15 pièces + un espace vide qui permet de glisser les pièces etc. (voir url en haut).
Quand on clique sur une pièce, il analyse toute la ligne de celle-ci, et SI il se trouve sur la ligne verticale où il y a l'espace vide, il entre dans la donction 1 (A si c'est en horizontal). Ensuite, il regarde SI la pièce cliquée est celle qui est située juste à coté de l'espace vide. Dans ce cas il entre dans la condition 2 (ou B) et déplace la pièce dans cet espace vide.
Là, il analyse bien si la pièce se trouve sur une ligne où il y a l'espace vide (entre dans le A ou 1). Mais il n'arrive pas à voir si la pièce est celle juste à coté du vide (conditions B et 2).
C'est donc dans ces deux conditions que ça bloque, et où il doit il y avoir quelque chose de non-reconnu par Mozilla...
if((parseInt(document.getElementById(id).style.left)==parseInt(document.getElementById(15).style.left)+75) | (parseInt(document.getElementById(id).style.left)==parseInt(document.getElementById(15).style.left)-75))
et
if((parseInt(document.getElementById(id).style.top)==parseInt(document.getElementById(15).style.top)+75) | (parseInt(document.getElementById(id).style.top)==parseInt(document.getElementById(15).style.top)-75))
:(
Comme je le pensais le module qui ne fonctionne pas totalement est move().
Voici sa retranscription avec mes alert :
function move(id)
{
var tampon;
if(document.getElementById(id).style.top==document.getElementById(15).style.top)
{
alert('conditionA');
if((parseInt(document.getElementById(id).style.left)==parseInt(document.getElementById(15).style.left)+75) | (parseInt(document.getElementById(id).style.left)==parseInt(document.getElementById(15).style.left)-75))
{
alert('conditionB');
tampon=document.getElementById(15).style.left;
document.getElementById(15).style.left=document.getElementById(id).style.left;
document.getElementById(id).style.left=tampon;
}
}
else if(document.getElementById(id).style.left==document.getElementById(15).style.left)
{
alert('condition1');
if((parseInt(document.getElementById(id).style.top)==parseInt(document.getElementById(15).style.top)+75) | (parseInt(document.getElementById(id).style.top)==parseInt(document.getElementById(15).style.top)-75))
{
alert('condition2');
tampon=document.getElementById(15).style.top;
document.getElementById(15).style.top=document.getElementById(id).style.top;
document.getElementById(id).style.top=tampon;
}
}
}
Pour expliquer en gros :
C'est un tableau de 16 cases/pièces, mais il n'y a que 15 pièces + un espace vide qui permet de glisser les pièces etc. (voir url en haut).
Quand on clique sur une pièce, il analyse toute la ligne de celle-ci, et SI il se trouve sur la ligne verticale où il y a l'espace vide, il entre dans la donction 1 (A si c'est en horizontal). Ensuite, il regarde SI la pièce cliquée est celle qui est située juste à coté de l'espace vide. Dans ce cas il entre dans la condition 2 (ou B) et déplace la pièce dans cet espace vide.
Là, il analyse bien si la pièce se trouve sur une ligne où il y a l'espace vide (entre dans le A ou 1). Mais il n'arrive pas à voir si la pièce est celle juste à coté du vide (conditions B et 2).
C'est donc dans ces deux conditions que ça bloque, et où il doit il y avoir quelque chose de non-reconnu par Mozilla...
if((parseInt(document.getElementById(id).style.left)==parseInt(document.getElementById(15).style.left)+75) | (parseInt(document.getElementById(id).style.left)==parseInt(document.getElementById(15).style.left)-75))
et
if((parseInt(document.getElementById(id).style.top)==parseInt(document.getElementById(15).style.top)+75) | (parseInt(document.getElementById(id).style.top)==parseInt(document.getElementById(15).style.top)-75))
:(
Bon bah j'ai été quiche! Comme quoi les problèmes sont souvent plus simple qu'on ne le pense o_O
Si ça ne se déplacait pas correctement, c'est parce que lorsqu'il généré la grille dans "l'espace", il décalait tout, ce qui fait que quand on cliquait sur une pièce, il déplacait celle d'à coté.. Je l'ai remarqué en cliquant par erreur dans le vide de la fenêtre à coté du jeu, il croyait que je cliquais sur une pièce -_- Bref! Problème résolu ^^ Merci à tous!
Si ça ne se déplacait pas correctement, c'est parce que lorsqu'il généré la grille dans "l'espace", il décalait tout, ce qui fait que quand on cliquait sur une pièce, il déplacait celle d'à coté.. Je l'ai remarqué en cliquant par erreur dans le vide de la fenêtre à coté du jeu, il croyait que je cliquais sur une pièce -_- Bref! Problème résolu ^^ Merci à tous!