Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

AJAX : Fonction javascript qui tourne en boucle

5 réponses
Avatar
Anonyme
Bonjour a tous,

Voilà, j\'essaie de créer un formulaire dynamique avec Ajax. Chaque
ligne du formulaire se compose de 3 champs textes et deux listes. Au fond
du formulaire, un lien me permet d\'ajouter une ligne de champs.

Pour ce faire, j\'appelle la fonction ci-dessous qui m\'ajoute une ligne de
formulaire entre les balises <div</div. Puis, cette fonction va modifier
l\'attribut \"onClick\" du lien au fond du formulaire afin de passer un
nouveau paramètre à la fonction (d\'abord onClick=\'mafonction(1);\' puis
onClick=\'mafonction(2);\' etc....)

Sous firefox pas de problème ! Mais sous explorer ma fonction tourne en
boucle et m\'ajoute des lignes à la suite sans que je clique sur le lien
d\'ajout. Ca va jusqu\'à bloquer mon navigateur...

Au cas ou quelqu\'un aurait un petit indice à me faire partager, j\'ai
copié ma fonction ci-dessous. Merci d\'avance!

function addline(i){
i+=1;

var Essais = null;

if(window.XMLHttpRequest) // FF
Essais = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
Essais = new ActiveXObject(\"Microsoft.XMLHTTP\");
else { // XMLHttpRequest non supporté par le navigateur
alert(\"Ce navigateur ne supporte pas les objets
XMLHTTPRequest...\"); return;
}
}
Essais.open(\"POST\", \"testAjax2.php\", true);
Essais.setRequestHeader(\'Content-Type\',\'application/x-www-form-urlencoded\');

Essais.onreadystatechange = function() {

if(Essais.readyState == 4){

nouvAttribut = \"addline(\"+i+\")\";

i2 = i-1;
/**
* Je rajoute chaque fois une ligne dans champ dans 2 balises
<div</div * avec pour id un nom suivis d\'un chiffre qui
s\'incrémente pour pouvoir * les différencier */
document.getElementById(\"ajouterUnChamp\"+i2).innerHTML +
Essais.responseText;

// Sous explorer, la méthode setAttribute n\'est pas supportée...
if(window.XMLHttpRequest){ // Firefox
document.getElementById(\'Addfield\').setAttribute(\"Onclick\",nouvAttribut);}
else if(window.ActiveXObject) // Internet Explorer
{ document.getElementById(\'Addfield\').onclick = addline(i);
exit; }
}
}
}
idChamps = i;
Essais.send(\"idChamps=\"+idChamps);
}

5 réponses

Avatar
Anonyme
Le Sat, 12 Aug 2006 17:56:46 +0200, Anonyme a écrit :

Bonjour a tous,

Voilà, j'essaie de créer un formulaire dynamique avec Ajax.
Chaque
ligne du formulaire se compose de 3 champs textes et deux listes. Au
fond du formulaire, un lien me permet d'ajouter une ligne de champs.

Pour ce faire, j'appelle la fonction ci-dessous qui m'ajoute une ligne
de formulaire entre les balises modifier l'attribut "onClick" du lien au fond du formulaire afin de
passer un nouveau paramètre à la fonction (d'abord
onClick='mafonction(1);' puis onClick='mafonction(2);' etc....)

Sous firefox pas de problème ! Mais sous explorer ma fonction tourne
en boucle et m'ajoute des lignes à la suite sans que je clique sur le
lien d'ajout. Ca va jusqu'à bloquer mon navigateur...

Au cas ou quelqu'un aurait un petit indice à me faire partager, j'ai
copié ma fonction ci-dessous. Merci d'avance!
[........................snip..........................]

En fait, je crois que ça vient de :
document.getElementById('Addfield').onclic = addline(i);

Comment peut-on gérer le changement d'attribut sous Explorer si il ne
supporte pas setAttribute et me fais une boucle infinie avec .onclic ?
Merci!
Bonne soirée
Avatar
ASM

En fait, je crois que ça vient de :
document.getElementById('Addfield').onclic = addline(i);

Comment peut-on gérer le changement d'attribut sous Explorer si il ne
supporte pas setAttribute et me fais une boucle infinie avec .onclic ?


onclick

et non pas ... onclic ! !

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM

En fait, je crois que ça vient de :
document.getElementById('Addfield').onclic = addline(i);

Comment peut-on gérer le changement d'attribut sous Explorer si il ne
supporte pas setAttribute et me fais une boucle infinie avec .onclic ?


onclick

et non pas ... onclic ! !


comme il n'y a pas cette coquille plus haut,
sans doute :

document.getElementById('Addfield').onclick = function(){addline(i)};

pourra mieux fonctionner

--
Stephane Moriaux et son [moins] vieux Mac


Avatar
Anonyme
Le Sat, 12 Aug 2006 18:07:30 +0200, Anonyme a écrit :

Le Sat, 12 Aug 2006 17:56:46 +0200, Anonyme a écrit :

Bonjour a tous,

Voilà, j'essaie de créer un formulaire dynamique avec Ajax.
Chaque
ligne du formulaire se compose de 3 champs textes et deux listes. Au
fond du formulaire, un lien me permet d'ajouter une ligne de champs.

Pour ce faire, j'appelle la fonction ci-dessous qui m'ajoute une ligne
de formulaire entre les balises modifier l'attribut "onClick" du lien au fond du formulaire afin de
passer un nouveau paramètre à la fonction (d'abord
onClick='mafonction(1);' puis onClick='mafonction(2);' etc....)

Sous firefox pas de problème ! Mais sous explorer ma fonction tourne
en boucle et m'ajoute des lignes à la suite sans que je clique sur le
lien d'ajout. Ca va jusqu'à bloquer mon navigateur...

Au cas ou quelqu'un aurait un petit indice à me faire partager, j'ai
copié ma fonction ci-dessous. Merci d'avance!
[........................snip..........................]

En fait, je crois que ça vient de :
document.getElementById('Addfield').onclic = addline(i);

Comment peut-on gérer le changement d'attribut sous Explorer si il ne
supporte pas setAttribute et me fais une boucle infinie avec .onclic ?
Merci!
Bonne soirée

Pour info voilà :

Sous IE au lieu d'utiliser directement le code suivant (puisqu'il ne
marche pas...) :

document.getElementById('Addfield').setAttribute("Onclick",mafonction(i));

Vous pouvez utiliser :

elt = document.getElementById('Addfield');
elt.setAttribute('onclick', function(){mafonction(i)});
elt.onclick = function(){ mafonction(i); }
Merci!
Bonne soirée,
Avatar
ASM

Pour info voilà :

Sous IE au lieu d'utiliser directement le code suivant (puisqu'il ne
marche pas...) :

document.getElementById('Addfield').setAttribute("Onclick",mafonction(i));

Vous pouvez utiliser :

elt = document.getElementById('Addfield');
elt.setAttribute('onclick', function(){mafonction(i)});
elt.onclick = function(){ mafonction(i); }


autant n'utiliser pour tous navigateurs que :

document.getElementById('Addfield').onclick = function(){mafonction(i);}

qui devrait passer partout ... (comme déjà dit par ailleurs)
au lieu de répéter la même chose

--
Stephane Moriaux et son [moins] vieux Mac