Formulaire, javascript et compatibilité navigateurs
Bonjour à tous,
J'ai un petit problème qui me fait m'arracher les cheveux et où je ne trouve pas de solution.
J'ai un logiciel d'un client qui tourne depuis quelques années, mais depuis que mon client a mis à jour son ie (9 puis 10), un formulaire a un problème. Ce formulaire sert à faire des factures, pour une facture, l'utilisateur à la possibilité de saisir plusieurs paiements. Pour cela un petit bouton javascript permet de rajouter une ligne de paiement en dessous de celle par défaut.
Sous ie8, la ligne se rajoute et lors de l'envoi du formulaire tous les paiements sont bien insérer dans la bdd.
Sous ie9, ie10, chrome (et probablement firefox et les autres), la ligne se rajoute bien au clique sur le bouton, en lisant les sources je vois bien mes nouveaux champs dans la page, les noms de ces champs sont bons, je peux donc remplir correctement mon formulaire. Seulement à l'envoi du formulaire, je n'ai plus que la première ligne de paiement qui est prise en compte dans mon script de traitement. Quelques soit le nombre de ligne rajouté, au submit il ne me traite que ma ligne en "dur" par défaut.
Voici un petit extrait du code :
Fonction d'ajout de ligne dynamique :
Code:
1 2 3 4 5 6 7
| function create_acompte_s3(i)
{
var i2 = i + 1;
document.getElementById('leschamps_'+i).innerHTML = '<table><tr><td class="bold fz12">Mode de paiement '+i2+'</td></tr><tr><td><table><tr><td><table cellpadding="0" cellspacing="0"><tr><td><input name="date_acompte_'+i2+'" style="text" size="14" /></td><td width="10px"> </td><td class="mid"><img src="../images/cal.png" onclick="ds_sh(form_fact.date_acompte_'+i2+');" title="Cliquez ici pour afficher le calendrier" ></td></tr></table></td><td><input type="text" name="montant_acompte_'+i2+'" size="5" /></td><td><input type="radio" name="mode_'+i2+'" value="Espece" />Esp<input type="radio" name="mode_'+i2+'" value="CB" />CB<input type="radio" name="mode_'+i2+'" value="Flash3" />Flash3<input type="radio" name="mode_'+i2+'" value="Pluriel" />Pluriel</td><td class="bold"> Infos : <input type="text" name="info_acompte_'+i2+'" class="right" /></td></tr></table></td></tr></table>';
document.getElementById('leschamps_'+i).innerHTML += (i <= 20) ? '<table cellpadding="0" cellspacing="0" class="right" width="528px"><tr><td class="bold right"><span id="leschamps_'+i2+'"><input type="button" onclick="javascript:create_acompte_s3('+i2+')" value="Ajouter une ligne" class="validation_tab" /></span></td></tr></table>' : '';
} |
Formulaire :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <table>
<tr>
<td class="bold fz12">Mode de paiement 1</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>
<table cellpadding="0" cellspacing="0">
<tr>
<td><input name="date_acompte_1" style="text" size="14" /></td>
<td width="10px"> </td>
<td class="mid"><img src="../images/cal.png" onclick="ds_sh(form_fact.date_acompte_1);" title="Cliquez ici pour afficher le calendrier" ></td>
</tr>
</table>
</td>
<td><input type="text" name="montant_acompte_1" size="5" /></td>
<td><input type="radio" name="mode_1" value="Espece" />Esp<input type="radio" name="mode_1" value="CB" />CB<input type="radio" name="mode_1" value="Flash3" />Flash3<input type="radio" name="mode_1" value="Pluriel" />Pluriel
</td>
<td class="bold"> Infos : <input type="text" name="info_acompte_1" class="right" /></td>
</tr>
</table>
</td>
</tr>
</table>
<table <?php echo $aff_table; ?> class="right" width="521px">
<tr>
<td class="bold right"><span id="leschamps_1"><input type="button" onclick="javascript:create_acompte_s3(1)" value="Ajouter un acompte" class="validation_tab" /></span></td>
</tr>
</table> |
Et le traitement du formulaire :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| for($j=0; $j<20; $j++)
{
if($_POST['montant_acompte_'.$j]!=NULL)
{
$date_acompte=transfo_date_en($_POST['date_acompte_'.$j]);
$mode=$_POST['mode_'.$j];
$info_acompte=addslashes($_POST['info_acompte_'.$j]);
$montant_acompte=$_POST['montant_acompte_'.$j];
if($date_acompte=='--')
{
$date_acompte=$date_fact;
}
//insertion mysql
}
} |
Voilà j'ai vraiment du mal à comprendre ce qui cloche étant donné que l'affichage se fait correctement sur tous les navigateurs, mais seul l'insertion dans la base déconne. Le problème doit certainement venir de ma boucle for dans le traitement, mais pour quelle raison certains navigateurs ne trouvent pas mes autres champs, là je ne sais pas.
Je vous remercie par avance pour l'aide que vous pourrez m'apporter,
Welden