Problème fonction javascript dans formulaire html [Résolu]

Messages postés
13
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 janvier 2010
- - Dernière réponse : cs_BumRush09
Messages postés
13
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.
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
3
Merci
>>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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 110 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Bul3
Messages postés
13
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 janvier 2010
0
Merci
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.
Commenter la réponse de cs_BumRush09
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
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
@+
Commenter la réponse de Bul3
Messages postés
13
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 janvier 2010
0
Merci
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>';
Commenter la réponse de cs_BumRush09
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
__ 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 ??????
Commenter la réponse de Bul3
Messages postés
13
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 janvier 2010
0
Merci
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 |----
, ,
   
Commenter la réponse de cs_BumRush09
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
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>
Commenter la réponse de Bul3
Messages postés
13
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 janvier 2010
0
Merci
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?
Commenter la réponse de cs_BumRush09
Messages postés
13
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 janvier 2010
0
Merci
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 .
Commenter la réponse de cs_BumRush09