Problème fonction javascript dans formulaire html

Résolu
cs_BumRush09 Messages postés 12 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 21 janvier 2010 - 25 mai 2009 à 11:52
cs_BumRush09 Messages postés 12 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 21 janvier 2010 - 25 mai 2009 à 15:55
bonjour,
j'ai un probleme avec des fonctions javascripts qui permettent de modifier dynamiquement le contenu de champ textbox, elle fonctionnent seulement si je retire la balise du formulaire, meme un "alert".
sinon l'erreur est :"cet objet ne gère pas cette méthode..."
 voici un petit bout de code :

<script>
function quantite_frais(link)
{
 val_quantite_frais=link.value;
 document.forms[0].getElementById('montant_total_frais').value=(val_montant_frais*val_quantite_frais)+((val_montant_frais*val_quantite_frais)*val_marge_frais);
}
</script>

echo'<form name="modif" method="GET" action="#">';

echo'<td></td>';

 echo'<td></td>';

 echo'<td></td>';

 echo'<td></td>';

je ne comprend pas car j'ai déjà utiliser cette méthode et cela fonctionner.

merci d'avance pour vos réponse.

9 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
25 mai 2009 à 15:20
>>Mais dans ce cas pourquoi il ne trouve pas les fonctions
>>dans le script du dessus
déjà, relis ce que je te disais
link, name élements = nom function....
après on verra !
et pour test test, ne garde que l'essentiel
tu remettras au fûr et à mesure en testant
3
cs_BumRush09 Messages postés 12 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 21 janvier 2010
25 mai 2009 à 11:55
rebonjour, edit ce n'est pas un formualire en "GET" mais en "POST"
j'ai un probleme avec des fonctions javascripts qui permettent de modifier dynamiquement le contenu de champ textbox, elle fonctionnent seulement si je retire la balise du formulaire, meme un "alert".
sinon l'erreur est :"cet objet ne gère pas cette méthode..."
 voici un petit bout de code :

<script>
function quantite_frais(link)
{
 val_quantite_frais=link.value;
 document.forms[0].getElementById('montant_total_frais').value=(val_montant_frais*val_quantite_frais)+((val_montant_frais*val_quantite_frais)*val_marge_frais);
}
</script>

echo'<form name="modif" method="POST" action="#">';

echo'<td></td>';

 echo'<td></td>';

 echo'<td></td>';

 echo'<td></td>';

je ne comprend pas car j'ai déjà utiliser cette méthode et cela fonctionner.

merci d'avance pour vos réponse.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
25 mai 2009 à 12:41
bonjour,

__ si tu nous mettais la page html résultante et pas le php,
ça irait bien mieux pour nous !
__ éviter des noms connus du javascript ( link par exemple )
__ document.forms[0].getElementrById ?
pourquoi ne pas mettre un name et utiliser document.name_formulaire
ou un id et faire document.getElementById ('id du formulaire')
ça évite que ce soit obligatoirement le 1er formulaire
t'es sûr qu'on peut utiliser getElementById sur
autre chose que document ?
__ onchange="quantite_'.$table.'(this)"...
tu vas donc avoir autant de fonction que de quantite créées ?
met le même name pour tous et utilise
et tu génères plusieurs lignes ? c'est possible ou pas ?
oui : met le même name et utilise
document.name_formulaire.name_champ[index]
il te reste à gérer le cas où il n'y a qu'une seule
ligne de crééer ( crée une ligne bidon caché ) et commence
index à partir de 1
non : pourquoi un name avec une variable php alors
@+
0
cs_BumRush09 Messages postés 12 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 21 janvier 2010
25 mai 2009 à 13:34
merci de t'être penché sur le sujet
j'ai oublié quelques points importants désolé :
- le problème existe avec un simple "alert()" dans le script dès que la balise "form" est présente, sinon les fonctions javascript s'éxécute correctement
- '.$table.' est utilisé car j'ai le même traitement plusieurs fois à un mot près
- j'en vient ici justement car l'utilisation d'un tableau dynamique javascript avec ligne caché que l'on dupplique ne permettait pas l'accès aux autres élement que celui appelé par la fonction
-voici le code simplifié :

<script>
function quantite_frais(link)
{
   alert("fonction javascript");
}
</script>

echo'<form name="modif" method="POST" action="#">';

echo'<td></td>';

 echo'<td></td>';

 echo'<td></td>';

 echo'<td></td>';

echo'</table>';
echo'';
 echo'</form>';
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
25 mai 2009 à 13:56
__ onchange="montant_frais(this)"
il n'existe pas de fonction montant_frais

__ evite les name d'éléments = nom de fonctions

le reste... déjà dit :

__ évite les noms connus ( voire réservé ) par le lavascript
ici, link

__ donne nous la page html, pas le php !!!!!!!
sinon, dis moi comment on devine le contenu
de tes $variables ??????
0
cs_BumRush09 Messages postés 12 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 21 janvier 2010
25 mai 2009 à 14:31
ok voila le code html avec les balises "form" :

<html>
<head>
 <link rel= "stylesheet" href="css/style_test.css" type="text/css" />
</head>
 

 

  

   




   





devis N°  D-2009-001

   ----

    Numeros Devis |
   Societe |
   Rang |
   Date Devis |
   Date envoi |
   Libelle |
   Montant |
   Montant corrige |
   Termine |
   Envoye |
   Regul |
   Obtenu |
   Perdu |
    
----
D-2009-001, douce-hydro, 0, 2009-05-15, , , 705 €, 0 €, 0, 0, 0, 0, 0






<script type ="text/javascript">
/***** frais *****/





//fonction mise à jour var globale quantité frais
function quantite_frais(link)
{
 alert("fonction javascript");
 //val_quantite_frais= link.value;
 //document.getElementById('montant_total_frais').value=(val_montant_frais*val_quantite_frais)+((val_montant_frais*val_quantite_frais)*val_marge_frais);
}





//fonction mise à jour var globale marge frais
function marge_frais(link)
{
 //var val_marge_frais=link.value;
 //document.getElementById('montant_total_frais').value=(val_montant_frais*val_quantite_frais)+((val_montant_frais*val_quantite_frais)*val_marge_frais);
}





// mise à jour var globale identifie nature frais choisie
function nature_frais(link)
{
 /*var val_nature_frais=link.selectedIndex;
 if(val_nature_frais==0)
 {
  val_montant_frais=taux_km_devis_utilisateur;
  document.getElementById('montant_frais').value=taux_km_devis_utilisateur;
  document.getElementById('montant_total_frais').value=(val_montant_frais*val_quantite_frais)+((val_montant_frais*val_quantite_frais)*val_marge_frais);
 }
 else
 {
  val_montant_frais=taux_frais[val_nature_frais];
  document.getElementById('montant_frais').value=taux_frais[val_nature_frais];
  document.getElementById('montant_total_frais').value=(val_montant_frais*val_quantite_frais)+((val_montant_frais*val_quantite_frais)*val_marge_frais);
 }*/
}





//fonction écriture montant frais
function montant_frais(link)
{
 //val_montant_frais=link.value;
 //document.getElementById('montant_total_frais').value=(val_montant_frais*val_quantite_frais)+((val_montant_frais*val_quantite_frais)*val_marge_frais);
 
}







/***** variable frais *****/
 var val_nature_frais=0;
var val_quantite_frais=1;
var val_marge_frais=0.2;
var val_montant_frais=2;
//tableau des taux frais récupère résultat requête php en tête
var  taux_frais = new Array();
var taux_frais=["0.355","40","50"];





var taux_km_devis_utilisateur=0.6;
</script>
Détail Frais






|nature frais |<souligne></th>quantite |<souligne></th>marge |<souligne></th>valide |modifier</th>
----
0, REPAS, test 3, 12, 40 €, 0.2, 480 €, 0, [index.php?pageref =devis_detail_synthese&id_devis= 1 synthese devis]

[index.php?pageref=devis_detail_frais&id_devis=1 details frais]

[index.php?pageref=devis_detail_prestation&id_devis=1 details prestation]

[index.php?pageref=devis_detail_materiel&id_devis=1 details materiel]

  
 
  
   
 

 
 

  
interface de gestion
  
<script language="Javascript">
//calcul largeur et hauteur de la fenetre
if (document.body)
{
 var larg = (document.body.clientWidth);
 var haut = (document.body.clientHeight);
}
else
{
 var larg = (window.innerWidth);
 var haut = (window.innerHeight);
}





var taille = larg;   // Longueur du menu
var taille2 = 30; // Hauteur du menu





var couleur_fond = "#BEC6CE";   //couleur de fond du menu
var couleur_rollover = "YELLOW";  //couleur de la cellule au passage de la souris
var couleur_texte = "#FFFFFF";   //couleur du texte
var couleur_texte_over = "#000000"; //couleur du texte lors du passage de la souris





var taille_texte  = 2;    //Taille de la police
var police_texte  = "Verdana";  //Type de police (Arial, Verdana...)





var target = true;  // True si ouverture dans le même document
var frame = "";  // Si frame, placer target à true et indiquer le nom de votre frame  
var nbelem = 6;  // Nombre d'éléments (categories)





var titre = new Array(nbelem);
var liens = new Array(nbelem);







titre[0] = '[index.php?pageref=devis Devis ]';





titre[1] = '[index.php?pageref=connexion Affaires]';





titre[2] = '[index.php?pageref=connexion Facturation]';





titre[3] = '[index.php?pageref=connexion Commandes]';





titre[4] = '[index.php?pageref=connexion Planning]';





titre[5] = '[index.php?pageref=personnel_identifier Identifier]';







 




<!----------------------------------affichage et gestion menu ---------------------------------------------->





function aff_menu()
{
 var taille_cellule = taille / nbelem;
 cible = (!target)? "_blank":frame;
 document.write("\");
 for(i=0;i<nbelem;i++)
 {
  document.write(\""+titre[i]+", \");
 }
  
 document.write("
");
}







function mOvr(src,clrOver)
{
 if (!src.contains(event.fromElement))
 {   
   src.style.cursor = 'hand';
   src.bgColor = clrOver;
   src.children.tags('A')[0].style.color = couleur_texte_over;
 }
}
 
 function mOut(src,clrIn)
{
 if (!src.contains(event.toElement))
 {
  src.style.cursor = 'default';
  src.bgColor = clrIn;
  src.children.tags('A')[0].style.color = couleur_texte;
 }
}





aff_menu();
</script>
 
  
         
</html>



 et le code sans la balise "form" qui affiche le pop-up

Modifier
Rang |NatureFrais |Designation |Quantité |Montant |Marge |
Montant Total |Valide | |
----
,
<select name ="nature_frais" class="textbox" onclick="nature_frais(this)">
   <option value='KM'>KM</option><option  selected  value='REPAS'>REPAS</option>
   <option value='HOTEL'>HOTEL</option></select>,
   ,
,
,
,
,

INDICER |MODIFIER |MODIFIER CONTENU |----
, ,
   
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
25 mai 2009 à 14:47
inutile de tout nous mettre ! ça décourage !!!!

extrait l'essentiel ... le nécessaire, tout le nécessaire,
mais rien que le nécessaire...

et regarde la console d'erreur ou active le debogage !
exemple,( avec FF  ):
Erreur : nature_frais is not a function
Fichier Source : file:///D:/Mes%20documents/%C3%A0%20D%C3%A9truire/!test.htm Ligne : 1
Erreur : nature_frais is not a function
Fichier Source : file:///D:/Mes%20documents/%C3%A0%20D%C3%A9truire/!test.htm Ligne : 1
Erreur : quantite_frais is not a function
Fichier Source : file:///D:/Mes%20documents/%C3%A0%20D%C3%A9truire/!test.htm# Ligne : 1

<table id="aff" border="1" cellpadding="2" cellspacing="2">----
Navigateurs |Quelques Explications |----, Chrome

</td>contrôler page actuelle / Options pour développeurs
/ Console Javascript, ----
FireFox
, Outils / Console d'erreurs
et mieux : télécharger FireBug, ----
Internet
Explorer
, activer le deboggage : Outils/options Internet/Avancés
dans la liste, sous "Navigation" : décocher
o Afficher une notification de chaque erreur de script
o Désactiver le débogage de Scripts (Internet Explorer)
et mieux (pour IE < 8) : télécharger le Debogger IE
voir aussi : DebugBar et Companion JS, ----
K-Meleon
, utils / Cons, ----
Opera
, utils / Asole d'erreurs, ----
Safari
, Debug / Show JavaScript Console
° modifier Fichier com.apple.Safari.plist situé dans le
répertoire : Support:\Documents and Settings\utilisateur
\Application Data\Apple Computer\Safari\Preferences\
y ajouter <key>IncludeDebugMenu</key>
----

</td></tr></tbody></table>
0
cs_BumRush09 Messages postés 12 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 21 janvier 2010
25 mai 2009 à 15:05
ok merci pour tes conseil je télécharge ça.
Mais dans ce cas pourquoi il ne trouve pas les fonctions dans le script du dessus quand il y a le formulaire et qu'il les trouve lorsqu'il n'y ai pas?
0
cs_BumRush09 Messages postés 12 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 21 janvier 2010
25 mai 2009 à 15:55
ok alors tout d'abord merci ça fonctionne pour une premier post je suis impresionné que ça aille si vite.
le problème venait de la fonction qui à le meme nom que l'input text.
au risque de passé pour un mito j'ai dans une autre page le même traitement où les noms et fonctions sont identiques donc je suis quand meme étonné.
enfin j'ai peut être loupé quelque chose.

merci .
0
Rejoignez-nous