Bonjour
Mon problème est pas des plus simples à expliquer.
Je vais diviser en plusieurs étapes pour bien comprendre ce qui ce passe :
Etape 1 : Mise en situation
Mon histoire commence avec une chaine de caractère en javascript contenant du code xHTML. Plus précisément un formulaire tout bete de login mot de passe.
jusque la tout va bien
La suite ba je passe tout ça dans une moulinnette pour l'afficher dans ma page.
innerHTML ne fonctionnant que sous IE j'ai donc fais une fonction qui me permet d'utiliser le DOM pour créé les balises, mettre les attribut etc etc en lui passant la chaine en parametre.
la fonction s'apel DOMinnerHTML(arg1,arg2,arg3,arg4)
le premier argument est al cible, la ou on va ratacher la chaine dans la page, le deuxième argument est la chaine, le troisième si on veu ajouter ou remplacer la chaine (add ou remplace), et le quatrieme argument la cible que l'on veut remplacer.
exemple :
var affichage = docment.getElementById('affichage');
var text = DOMinnerHTML(affichage,chaine,'add','onSenFouOnAjoute');
jusque la tout va bien
Etape2 : la création du formulaire
Je vais pas mettre toute la fonction, mais juste la partie qui nous interesse
On peu voir ici que je gère l'insertion des attributs de mes balises.
J'esxplique vite fais, le test que je fais. Je test si le nom de l'attribut est un onEvent, si c'est le cas il faut différentier IE des autres. En effet IE ne va pas focntionner si on utilise une setAttribute, le onevent ne fonctionnera pas (alors qu'ailleur si :euh: )
Donc pour IE on doit utiliser la ligne avec le eval
Etape 3 : le problème
Le problème intervient maintenant.
En effet un évènement généré par le eval (donc pour IE) va executer la fonction.
Par exemple sur un onclick qui va faire un simple alert('blabla'); ça fonctionne. Si on appel une fonction avec des parametres ça fonctionne.
La ou ça ne fonctionne pas c'est l'envois de parametre.
j'explique :
le formualire posède un bouton qui et sur le click du bouton j'apel la fonction connexionAjax.
La je passe a ajax les parametres login mdp que je recupère comme ceci :
login = document.forms['formConnexion'].login.value;
mdp = document.forms['formConnexion'].mdp.value;
et bien avec IE j'ai une erreur javascript comme quoi document.forms['formConnexion'].login a uen valeur null ou inexistante (je suppose donc qu'il va me dire la meme chose pour le mot de passe)
Alors que sous FF ça focntionne parfaitement.
Voila j'espère avoir été assez clair sur l'énnoncer de mon problème.
Merci d'avance pour vos réponse.
Modifié par azimel (02 Jun 2006 - 16:04)
Mon problème est pas des plus simples à expliquer.
Je vais diviser en plusieurs étapes pour bien comprendre ce qui ce passe :
Etape 1 : Mise en situation
Mon histoire commence avec une chaine de caractère en javascript contenant du code xHTML. Plus précisément un formulaire tout bete de login mot de passe.
chaine='<div id="membre">'
+'<form action="index.php" method="post" id="formConnexion">'
+'<p>'
+'<label>Pseudo : <input type="text" name="login" value="" /></label><br />'
+'<label>MDP : <input type="password" name="mdp" value="" /></label><br />'
+'<input type="button" name="envoie" value="ok" onclick="connexionAjax()" />'
+'</p>'
+'</form>'
+'</div>';
jusque la tout va bien
La suite ba je passe tout ça dans une moulinnette pour l'afficher dans ma page.
innerHTML ne fonctionnant que sous IE j'ai donc fais une fonction qui me permet d'utiliser le DOM pour créé les balises, mettre les attribut etc etc en lui passant la chaine en parametre.
la fonction s'apel DOMinnerHTML(arg1,arg2,arg3,arg4)
le premier argument est al cible, la ou on va ratacher la chaine dans la page, le deuxième argument est la chaine, le troisième si on veu ajouter ou remplacer la chaine (add ou remplace), et le quatrieme argument la cible que l'on veut remplacer.
exemple :
var affichage = docment.getElementById('affichage');
var text = DOMinnerHTML(affichage,chaine,'add','onSenFouOnAjoute');
jusque la tout va bien
Etape2 : la création du formulaire
Je vais pas mettre toute la fonction, mais juste la partie qui nous interesse
for(i=0;i<attribut.length;i++)
{
if(attribut[i+1])
{
//on recupère l'attribut
var attrTemp=attribut[ i].split(' ')[1];
var valeurAttrTemp=supprQuote(attribut[i+1].split(' ')[0]);
if(document.all)//on différencie le cas IE des autre navigateur. {
if(attrTemp.substring(0,2)=='on')
eval('baliseCree.'+attrTemp+' = function()'+valeurAttrTemp+'};'
else
baliseCree.setAttribute(attrTemp,valeurAttrTemp);
}
else
baliseCree.setAttribute(attrTemp,valeurAttrTemp);
}
}
On peu voir ici que je gère l'insertion des attributs de mes balises.
J'esxplique vite fais, le test que je fais. Je test si le nom de l'attribut est un onEvent, si c'est le cas il faut différentier IE des autres. En effet IE ne va pas focntionner si on utilise une setAttribute, le onevent ne fonctionnera pas (alors qu'ailleur si :euh: )
Donc pour IE on doit utiliser la ligne avec le eval
Etape 3 : le problème
Le problème intervient maintenant.
En effet un évènement généré par le eval (donc pour IE) va executer la fonction.
Par exemple sur un onclick qui va faire un simple alert('blabla'); ça fonctionne. Si on appel une fonction avec des parametres ça fonctionne.
La ou ça ne fonctionne pas c'est l'envois de parametre.
j'explique :
le formualire posède un bouton qui et sur le click du bouton j'apel la fonction connexionAjax.
La je passe a ajax les parametres login mdp que je recupère comme ceci :
login = document.forms['formConnexion'].login.value;
mdp = document.forms['formConnexion'].mdp.value;
et bien avec IE j'ai une erreur javascript comme quoi document.forms['formConnexion'].login a uen valeur null ou inexistante (je suppose donc qu'il va me dire la meme chose pour le mot de passe)
Alors que sous FF ça focntionne parfaitement.
Voila j'espère avoir été assez clair sur l'énnoncer de mon problème.
Merci d'avance pour vos réponse.
Modifié par azimel (02 Jun 2006 - 16:04)