Modifier un champ de formulaire

Eléphant du PHP | 97 Messages

10 janv. 2012, 18:02

Bonjour,

je suis débutant en javascript et j'aurais voulu faire un truc vraiment tout bête : on entre une valeur dans un champ de formulaire et en cliquant sur un bouton, en fonction de la valeur qu'on a rentré, ça va modifier la valeur de champ de texte du même formulaire. Il faut que les valeurs du formulaire restent croissantes, c'est tout !

pour le moment j'ai fait que sur une valeur pour voir si ça marchait, mais en cliquant sur le bouton qui est censé activer le javascript, ça me fait rien.

La fonction qui calcule la nouvelle valeur à afficher :

Code : Tout sélectionner

<script language="javascript"> function f() { var _pte=document.getElementById("in_moyenne_pte"); var _hph=document.getElementById("in_moyenne_hph"); var _hpd=document.getElementById("in_moyenne_hpd"); if (_pte.value > _hph.value && _pte.value < _hpd.value) _hph.value=_pte.value; } </script>
mon appel de la fonction dans le formulaire :
<form name='changer' method=post action='rapport/edit_rapport.php'>";

<table class="center" id="resultat" >

echo'
<tr>
<td><input type="text" name="in_moyenne_pte" id="in_moyenne_pte" style="text-align: right;" tabindex=170 size=3 value='.(int)$pte .'> '.$unite.'</td>

<td><input type="text" name="in_moyenne_hph" id="in_moyenne_hph" style="text-align: right;" tabindex=172 size=3 value='. (int)$hph .'> '.$unite.'</td>';

'<td><input type="text" name="in_moyenne_hpd" id="in_moyenne_hpd" style="text-align: right;" tabindex=174 size=3 value=' . (int)$hpd . '> '.$unite.'</td>';

echo '
</tr>
</table>

';
echo '<br /><div align=center><input type="button" onclick=f() value="modifier les champs"></div>';
echo "</form>; 

Je galère par mal avec le JavaScript, c'est la première fois que j'en fais. J'ai bien essayé de regarder tout un tas de site, mais ca donne ca pour le moment.

Merci d'avance pour votre aide

Eléphant du PHP | 97 Messages

10 janv. 2012, 18:30

Je pensais changer ma fonction javascript comme ca, est-ce possible ? Parce que cette méthode semble plus rapide que la précédente. (en faisant comme ça, j'obtiens le même résultat qu'avant, c'est-à-dire que le bouton d'activation javascript ne me met aucun message d'erreur et n'agit pas du tout

Code : Tout sélectionner

for ($i=0;i<nb_element_formulaire;i++) if ((int)documents.changerform.element[i].value > (int)documents.changer.element[i+1].value) { (int)documents.changerform.element[i+1].value = (int)documents.changer.element[i].value; }

ViPHP
xTG
ViPHP | 7331 Messages

10 janv. 2012, 20:00

C'est un malheureux copier/coller ton code de formulaire ? Car tu mélanges du html avec du PHP.

Pour ton dernier code c'est bizarre. Si nb_element_formulaire est le nombre d'élément alors tu vas de 0 à N-1 éléments.
Sauf qu'en comparant i à i+1 tu vas donc de 0 à N ce qui à mon avis n'est pas voulu et te fais travailler sur un élément qui n'existe pas.

Eléphant du PHP | 97 Messages

11 janv. 2012, 11:20

Oui j'ai copié le formulaire. Il fonctionne très bien !
Le formulaire est contenu dans un tableau.
A la fin du tableau, je crée un bouton "modifier les champs", qui lorsqu'on clique dessus, est censé faire appel à la fonction javascript.

Je te remet le code de façon un peu plus ordonnée :
echo "<fieldset><legend>Valeurs préconisées</legend><form name='changerform' method=post action='rapport/edit_rapport.php'>";

        $unite = "kVA";

echo'
    <table class="center" id="resultat" >
        <tr>
        <th width="60"><label for="moyenne_pte">Pte</label></th>
        <th width="60"><label for="moyenne_hph">HPH</label></th>
        <th width="60"><label for="moyenne_hch">HCH</label></th>
        <th width="60"><label for="moyenne_hpe">HPE</label></th>
        <th width="60"><label for="moyenne_hce">HCE</label></th>
         </tr>';

//Affichage des champs pour saisir les moyennes.
    $pte = isset($_SESSION['session_in_moyenne_pte']) ? (int)$_SESSION['session_in_moyenne_pte'] : 0;
    $hph = isset($_SESSION['session_in_moyenne_hph']) ? (int)$_SESSION['session_in_moyenne_hph'] : 0;
    $hch = isset($_SESSION['session_in_moyenne_hch']) ? (int)$_SESSION['session_in_moyenne_hch'] : 0;
    $hpe = isset($_SESSION['session_in_moyenne_hpe']) ? (int)$_SESSION['session_in_moyenne_hpe'] : 0;
    $hce = isset($_SESSION['session_in_moyenne_hce']) ? (int)$_SESSION['session_in_moyenne_hce'] : 0;

echo'
        <tr>
        <td><input type="text" name="in_moyenne_pte" id="in_moyenne_pte" style="text-align: right;" tabindex=170 size=3 value='.(int)$pte .'> '.$unite.'</td>
        <td><input type="text" name="in_moyenne_hph" id="in_moyenne_hph" style="text-align: right;" tabindex=171 size=3 value='. (int)$hph .'> '.$unite.'</td>
        <td><input type="text" name="in_moyenne_hch" id="in_moyenne_hch" style="text-align: right;" tabindex=172 size=3 value='. (int)$hch .'> '.$unite.'</td>
        <td><input type="text" name="in_moyenne_hpe" id="in_moyenne_hpe" style="text-align: right;" tabindex=173 size=3 value='. (int)$hpe .'> '.$unite.'</td>
        <td><input type="text" name="in_moyenne_hce" id="in_moyenne_hce" style="text-align: right;" tabindex=174 size=3 value='. (int)$hce .'> '.$unite.'</td>
        </tr>
   
</table>';

//La je crée le bouton qui va appeler la fonction JavaScript.

echo '<br /><div align=center><input type="button" value="modifier les champs" onClick="f(); return false;"/></div>';


//Et voilà pour le moment à quoi ressemble ma fonction JavaScript.

<script language="JavaScript">
<!--           
function f()
{
    var pte=document.getElementById("in_moyenne_pte");
    var hph=document.getElementById("in_moyenne_hph");
    var hch=document.getElementById("in_moyenne_hch");
    var hpe=document.getElementById("in_moyenne_hpe");
    var hce=document.getElementById("in_moyenne_hce");
   
   
    if (_pte.value > _hph.value && _pte.value < _hch.value)
   {
         _hph.value=_pte.value;
   }

    /*
    for (i=0;i<3;i++)
    if (documents.changerform.element[i].value > documents.changerform.element[i+1].value)
    {
        documents.changerform.element[i+1].value = documents.changerform.element[i].value;
    }   
    */

}
-->   
</script>
Mes appels à la fonction document.getElementById fonctionnent bien, quand je fais un alert(pte) par exemple, ca m'affiche bien le bon résultat. Donc maintenant il faudrait les traiter pour modifier la valeur des autres en fonction des modifications qu'on apporte

Eléphant du PHP | 97 Messages

11 janv. 2012, 12:32

J'ai "un peu" avancé dans mes recherches

Voici maintenant ma fonction f() :

Code : Tout sélectionner

<script language="JavaScript"> <!-- function f() { //$toto=document.getElementById("in_moyenne_pte"); //alert('toto'); var pte=document.getElementById("in_moyenne_pte").value; var hph=document.getElementById("in_moyenne_hph").value; var hch=document.getElementById("in_moyenne_hch").value; var hpe=document.getElementById("in_moyenne_hpe").value; var hce=document.getElementById("in_moyenne_hce").value; //alert(pte); //alert(hph.value) //alert(hch.value) //alert(hpe.value) //alert(hce.value) //alert(parseFloat(pte.value)) //if (pte > hph && pte < hch) alert(pte); alert(hph); <?phpif (pte>hph && pte<hch) ?> hph = pte; alert(hph); } --> </script>
Avant de cliquer sur le bouton qui lance le JavaScript, j'ai ces valeurs la :
pte=1000
hph=81
hch=1500

Et j'obtiens successivement en alert : 1000 / 81 / 1000
Ce qui signifie que l'on passe bien dans la boucle if (c'est en ça que je dis que j'ai un peu avancé :) )
Mais en revanche, la valeur de hph a bien été modifiée par sa valeur, mais elle n'est pas modifiée sur l'affichage.