Activer un bouton ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Activer un bouton ?

par Sebe » 15 déc. 2006, 23:45

Salut,

Où en suis aujourd'hui ?
Après avoir dû changer les facteurs (évidement, ce n'est pas Excell ici), le code est capable d'appliquer la bonne réponse à la vitesse 1 et 2 par contre, je n'arrrive pas à récupérer la valeur du palier 3 !

Voici le code:
// code repris du fichier PHP *************************************************
     // Fonction de calcul de la vitesse
function vitesse($tempsp, $palier) {
	if($tempsp != 0) return ((Math.round((($palier/$tempsp) / 60  ) * 100 )) / 100);
    return (false);
    } 
//Fin de la reprise ***********************************************************

// Test du champs temps
function verifTemps(chpTemps, v_field){
	var tempTab = chpTemps.value.split(':');
    var temps = 0;
    for(i = 0; i < tempTab.length; i++){
    	// Conversion de la valeur en entier
    	var t = parseInt(tempTab[i]);
    	// Teste si la valeur est un chiffre
    	if(isNaN(t)){
    		alert('Seuls les chiffres sont acceptés');
        	chpTemps.value = '00:00:00';
        	chpTemps.focus();
        	return(true);
        	}
		// Teste si les minutes et (ou) les secondes sont comprises entre 0 et 59
    	if(i != 0 && tempTab[i] > 59){
    		alert('Les minutes ou les secondes ne peuvent exéder 59');
        	chpTemps.value = '00:00:00';
        	chpTemps.focus();
        	return(false);
        	}
		}
    // Cumul du temps
	temps = (( Number( tempTab[0] ))
           + ( Number( tempTab[1] ) / 60 )
           + ( Number( tempTab[2] ) / 3600 ) ) ;
    // alert(temps);
	// Si cumul <= 0 return faux (invalide)
    if(temps <= 0) {
    	alert('Le temps doit être supérieur ou égal à une seconde');
        chpTemps.value = '00:00:00';
        chpTemps.focus();
        return(true);
    	} 
	else {
    alert(v_field);
    	switch (v_field){
        case 1 : 
        	$palier = 800;
			vitesse1 = vitesse(temps, $palier);
			document.forms.test.vitesse1.readonly = false;
			document.forms.test.vitesse1.value = String( vitesse1 );
			document.forms.test.vitesse1.readonly = true;

        case 2 :
			$palier = 800;
            vitesse2 = vitesse(temps, $palier);
            document.forms.test.vitesse2.readonly = false;
            document.forms.test.vitesse2.value = String( vitesse2 );
            document.forms.test.vitesse2.readonly = true;

        case 3 :
            // Ici cela devient coton car je n'arrive pas à récupérer la variable du combobox !
			// $palier = $palier3;
            vitesse3 = vitesse(temps, $palier);
			
			document.forms.test.vitesse3.readonly = false;
			document.forms.test.vitesse3.value = String( vitesse3 );
			document.forms.test.vitesse3.readonly = true;
          
		case 4 :
            document.forms.test.vma. readonly = false;
            document.forms.test.vma. value = "nouvelle_valeur";
            document.forms.test.vma. readonly = true;
		  
        }
     }
	} 
En effet, si pour le palier 1 et 2 les valeurs sont 800m sans choix possible, il n'en est rien pour le palier 3 que je saisis ainsi:
                    <select name="palier3" size="1" id="palier3">
                      <option value="1000" selected="selected">1000 m - D&eacute;butant</option>
                      <option value="1500">1500 m - Sprinter</option>
                      <option value="2000">2000 m - Niveau moyen</option>
                      <option value="3000">3000 m - Bon niveau</option>
                    </select>
Peut-être qu'une bonne âme de passage pourrait me filer un coup de main ou un bon tuyau ?

D'avance, merci.

par Sebe » 12 déc. 2006, 01:12

Re,

Dans mon test, j'aimerai savoir ce qu'il est mieux de faire (en fonction de la faisabilité aussi !):
1 Améliorer la fonction Javascript pour que le calcul de vitesse se fasse automatiquement
2. Utiliser le bouton submit pour générer une nouvelle page avec les résultats

Pour info: J'ai déjà les fonctions PHP de calcul pour le 2e choix
// Fonction de calcul de la vitesse
function vitesse($tempsp, $palier, $facteur) {
    if($tempsp != 0) return ($palier*$facteur/$tempsp);
 return (false);
} 

// Fonction d'évaluation de la récupération
function recup($fcrecup, $fcp3){
   if($fcrecup == 0 || $fcp3 == 0) return(" "); //Pas de message d'erreur !
   if($fcrecup < ($fcp3 * 0.5652)) return("Excellente");
   if($fcrecup < ($fcp3 * 0.5815)) return("Très bonne");
   if($fcrecup < ($fcp3 * 0.6033)) return("Bonne");
   if($fcrecup < ($fcp3 * 0.6304)) return("Moyenne");
   if($fcrecup < ($fcp3 * 0.663)) return("Médiocre");
   if($fcrecup < ($fcp3 * 0.6902)) return("Mauvaise");
   return("Très mauvaise");
} 
J'aimerai mieux que le 2e choix soit la meilleure solution car j'ai comme qui dirait un problème avec le javascript :roll:

Merci

par Sebe » 12 déc. 2006, 00:00

Salut,

Une journée entière à me gratter la tête pour me rendre compte que, puisque cela fonctionnait en appelant directement les pages, cela ne pouvait venir que du portail !

Après des recherches, je suis enfin tombé sur la solution:
function open_Window(theURL,winName,features) {
  	window.open(theURL,winName,features);
	}
<input name="button" type="button" value="Protocole du test" 
onClick="open_Window('<?php echo "$mosConfig_live_site"; ?>
/components/com_cat/html/protocole.html','protocole','scrollbars=yes,resizable=yes,width=500,height=400');"/>
Maintenant, je commence à y voir un peu plus clair ... passons à l'étape suivante !

A+

par Ajoloca » 11 déc. 2006, 13:55

Bonjour,

Pour ce que tu cherches à faire, il faut partir sur une autre aproche

Regarde du coté de window.open() de JavaScript.

Ou bien de la balise <div></div> et des propriétés CSS display et z-index.

par Sebe » 11 déc. 2006, 13:12

Re ... c'est encore moi !

Je continus mon petit bonhomme de chemin ... j'ai fait les test sur les autres saisies et cela fonctionne ! Comme j'avais envie d'un peu changer et d'apporter de l'amélioration, je me suis dans l'idée de créer un bouton 'Protocole de Test' qui me permettrait d'enlever tout ce texte avant le test tout en laissant la possibilité au visiteur de s'en faire une idée en cliquant sur le bouton qui ouvrirait une fenêtre avec tout le protocol !

C'est bien là que ce complique mon histoire car je ne voulais pas faire un lien vers une page extérieur mais utiliser une fonction (je commence à aimer ces bêtes là) et j'ai donc créer mon bouton de cette façon :
<input name="button" type="button" value="Protocole de test" onClick="protocole(this)"/></td>
et une fonction comme suit:
function protocole (){
		window.alert("Le C.A.T.- test est un test de course r&eacute;elle, sur le terrain, en trois paliers progressifs de vitesse. <BR /> * Déroulement sur piste plate et étalonnée; <BR /> * Utilisation d un cardio-fréquencemètre, <BR /> * Échauffement léger de dix minutes.")
		}
en me disant que la mise en page doit être comme pour le HTML ... et bien non, c'est pas si facile et vous pouvez vous en rendre compte sur le lien précédement donné !

Alors j'oublies ce procédé ou y-a-t-il une astuce ?

Merci

par Sebe » 11 déc. 2006, 11:41

Salut,

Un nouveau jour qui commence pour moi sous une bonnes étoiles car il y a du mieux et du vraiment mieux ... il y avait une différence dans la fonction utilisé que je me suis empêché de corriger !

Résultat:
Le test se fait correctement et renvoit une erreur mais il faut avoir préalablement cliqué dans le champs sinon, impossible d'avoir un message d'errerur en actionnant le bouton 'submit' ... que dois-je faire par rapport à cela ?
Concernant les champs de saisis, j'ai un peu changer la ligne de texte pour avoir ceci:
<input type="text" name="tempsp1" id="tempsp1" value="00:00:00" size="6" maxlength="8" onblur="verifTemps(this);" />
J'ai encore une question par rapport à la fonction 'verifTemps' que Ajoloca me propose c-à-d:
// document.validation(verifTemp(chpTemps), verifFormulaire()) 
function verifTemps(chpTemps){
   			var tempTab = chpTemps.value.split(':');
   			var temps = 0;
   			for(i = 0; i < tempTab.length; i++){
      			// Conversion de la valeur en entier
      			var t = parseInt(tempTab[i]);
      			// Teste si la valeur est un chiffre
      			if(isNaN(t)){
         			alert('Seuls les chiffres sont acceptés');
         			chpTemps.value = '00:00:00';
         			chpTemps.focus();
         			return(true);
      			}
      			// Teste si les minutes et (ou) les secondes
      			// sont comprises entre 0 et 59
      			if(i != 0 && tempTab[i] > 59){
         			alert('Les minutes ou les secondes ne peuvent exéder 59');
         			chpTemps.value = '00:00:00';
         			chpTemps.focus();
         			return(false);
      			}
      			// Cumul du temps
      			temps += t;
   			}
   			// Si cumul <= 0 return faux (invalide)
   			if(temps <= 0) {
   				alert('Le temps doit être supérieur ou égal à une seconde');
   				chpTemps.value = '00:00:00';
   				chpTemps.focus();
   				return(true);
   			}
			} 
Puis-je y coller un 'else' pour que le calcul de vitesse s'opére ? Voici la fonction de calcul en PHP qui avait été faite:
// Fonction de calcul de la vitesse
function vitesse($tempsp, $palier, $facteur) {
    if($tempsp != 0) return ($palier*$facteur/$tempsp);
	return (false);
} 
Si je venais à lui coller ce 'else' et que l'on venait par la suite à changer le palier 3 (seul palier qui peut varier), n'y aura-t-il pas un problème ?

Merci

NB Maintenant que j'ai un model, je continu à bosser de mon coté sur le test des autres champs ... je vous donnerai des nouvelles que vous pouvez toujours suivre ici !

par Sebe » 11 déc. 2006, 01:32

Re,

Cela ne peut pas être le même code, ça ne fonctionne pas chez moi ... j'ai dû me planter quelque part !

Je vais essayer de faire une bonne nuit et demain je péle la bête !

Merci, je sais plus ou moins où chercher ! :twisted:

par Ajoloca » 11 déc. 2006, 01:24

Re,

Le même code (j'ai juste ajouté les deux autres champs)

par Sebe » 11 déc. 2006, 01:13

Re,
Pour la citation, tu peux me citer. En régle générale je dis ce que je pense et j'assume.
Pour cetains c'est un défaut pour moi une qualité. A chacun de juger.
C'était un copier/coller et j'ai pas chercher plus loin que de mettre la citation :lol:
Le onblur="JavaScript:nom_fonction(this);"

Comme tu l'as compris le '&#058' (il manque le ; si je le mts il le transforme en :) c'est le code HTML pour écrire le caractère : (deux points). J'avais au départ mis les deux points mais le parseur de code les transforme en '&#058' (surement parce que je l'ai mis entre les balises php au lieu des balises code).
Je devenais vraiment fou avec ce truc ... je restais complètement bloqué dessus !
L'intérêt du paramètre this.

Tou simplement je passe à la fonction le champ lui même ce qui me permet d'exploiter dans la fonction le "caractéristiques" qui m'intéressent.
Dans ce cas son contenu(la valeur) chpTemps.value mais aussi de forcer un évenement chpTemps.focus().

Un autre intérêt, c'est de pouvoir utiliser la même fonction pour le même type de champ (seul le champ - this - est différent)
Même avec le changement précédent, la fonction ne me détecte pas d'erreur et pourtant il y en a une car je ne remplis aucun champs !

Pour bien s'immaginer ce que je veux faire c'est ici qui est un site où j'essaye tout et n'importe quoi ! En l'occurence, je vous laisse la version précédente avec les 2 boutons ... la version actuelle ne me renvoit pas les message d'erreur que j'attends.

Merci pour tout

par Ajoloca » 11 déc. 2006, 00:59

Re,

Pour la citation, tu peux me citer. En régle générale je dis ce que je pense et j'assume.
Pour cetains c'est un défaut pour moi une qualité. A chacun de juger.

Le onblur="JavaScript:nom_fonction(this);"

Comme tu l'as compris le '&#058' (il manque le ; si je le mts il le transforme en :) c'est le code HTML pour écrire le caractère : (deux points). J'avais au départ mis les deux points mais le parseur de code les transforme en '&#058' (surement parce que je l'ai mis entre les balises php au lieu des balises code).

L'intérêt du paramètre this.

Tou simplement je passe à la fonction le champ lui même ce qui me permet d'exploiter dans la fonction le "caractéristiques" qui m'intéressent.
Dans ce cas son contenu(la valeur) chpTemps.value mais aussi de forcer un évenement chpTemps.focus().

Un autre intérêt, c'est de pouvoir utiliser la même fonction pour le même type de champ (seul le champ - this - est différent)

par Sebe » 11 déc. 2006, 00:38

Re,
Il ne faut surtout pas hésiter à poser des questions quant tu ne comprends pas.
N'oublie pas ceci : Il n'y a pas de question con, seuls le cons ne posent pas de questions.
Bon alors, je n'ai pas saisis à quoi servent exactement les arguments, et ce morceau de code 'JavaScript&#058' livré avec le bouton ... j'ai beau lire sur le web ou dans 'Javascript pour les Nuls' mais ces 2 choses restent incompréhensibles pour moi ! Il faut ajouter aussi que je comprends pas pourquoi mon bouton ne me renvoit pas d'erreur à la soumission du formulaire !

Voiloù

par Ajoloca » 10 déc. 2006, 23:27

Re,

Voilà un bout de code qui ne sert qu'à tester la fonction, mais il fonctionne.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta name="generator" content="Bluefish 1.0.7"/>
		<meta name="author" content="José LOPEZ"/>
		<meta name="date" content="2006-12-10T22:19:52+0100"/>
		<meta name="copyright" content=""/>
		<meta name="keywords" content=""/>
		<meta name="description" content=""/>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
		<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>
		<meta http-equiv="content-style-type" content="text/css"/>
		<meta http-equiv="expires" content="0"/>
		<!--<meta http-equiv="refresh" content="5; URL=http://"/>-->
		<title>V&eacute;rif temps</title>
		<script type="text/JavaScript">
			function verifTemps(chpTemps){
   			var tempTab = chpTemps.value.split(':');
   			var temps = 0;
   			for(i = 0; i < tempTab.length; i++){
      			// Conversion de la valeur en entier
      			var t = parseInt(tempTab[i]);
      			// Teste si la valeur est un chiffre
      			if(isNaN(t)){
         			alert('Seuls les chiffres sont acceptés');
         			chpTemps.focus();
         			return(true);
      			}
      			// Teste si les minutes et (ou) les secondes
      			// sont comprises entre 0 et 59
      			if(i != 0 && tempTab[i] > 59){
         			alert('Les minutes ou les secondes ne peuvent exéder 59');
         			chpTemps.focus();
         			return(false);
      			}
      			// Cumul du temps
      			temps += t;
   			}
   			// Si cumul <= 0 return faux (invalide)
   			if(temps <= 0) {
   				alert('Le temps doit être supérieur ou égal à une seconde');
   				chpTemps.focus();
   				return(true);
   			}
			} 
		</script>
	</head>
<body>
	<div>
		<form name="test" action="" method="post">
			<input type="text" name="palier1" size="6" value="00:00:00" onblur="verifTemps(this);" />
		</form>
	</div>
</body>
</html>

par Sebe » 10 déc. 2006, 21:35

Re,

Ben là, y'a un petit problème car plus rien ne se passe ...pas demessage d'erreur comme avant !

Tu m'as dit:
Dans ce cas tu devrais supprimer le bouton de validation.
Mais ne faut-il pas changer quelque chose dans autre bouton ... je devrais appeler une fonction ? A noter que je n'ai pas encore fait les requêtes qui me serviront à stocker dans les tables !

Merci

par Ajoloca » 10 déc. 2006, 19:41

Re,
Dans ce cas tu devrais supprimer le bouton de validation.
Que separait-il si l'utilisateur valide (submit) sans utiliser le bouton de test (validation) ?

Tes champs ne seront jamais vérifiés.

Sert toi de l'évenement "onblur()" qui est l'invers du "focus()".
L'évenement "onblur()" se déclange quand le champ (zone) perds le focus (on quite le champ)

Tu as juste une petite modif à faire dans la fonction verifTemps().
Elle deviendrait

Code : Tout sélectionner

function verifTemps(chpTemps){ var tempTab = chpTemps.value.split(':'); var temps = 0; for(i = 0; i < tempTab.length; i++){ // Conversion de la valeur en entier var t = parseInt(tempTab[i]); // Teste si la valeur est un chiffre // Retourne faux (invalide) si c'est pas le cas if(isNaN(t)){ alert('Seuls les chiffres sont accétés'); chpTemps.focus(); } // Teste si les minutes et (ou) les secondes // sont comprises entre 0 et 59 if(i != 0 && tempTab[i] > 59){ alert('Les minutes ou les secondes ne peuvent exéder 59'); chpTemps.focus(); } // Cumul du temps temps += t; } // Si cumul <= 0 return faux (invalide) if(temp > 0) return(true); alert('Le temps doit être supérieur ou égal à une seconde'); chpTemps.focus(); }
Et dans tes champs de saisie
<input type="text" name="palier1" value="00:00:00" onblur="JavaScript:verifTemps(this);">

par Sebe » 10 déc. 2006, 19:15

Salut,

Merci Ajoloca, cela me semble visuellement plus clair !
Y'a quand même une question par rapport à cette proposition !

J'ai fait mon formulaire avec 2 boutons:
- 'button' pour faire les tests sur les entrées et faire les calcules
<input name="button" type="button" onclick="validation(this.form);" value="Validation du test" />
- 'submit' pour mettre les saisies dans les tables après avioir utilisé le 1er bouton
<input name="submit" type="submit" onclick="POST" value="Enregistrement du test" />
C'est le premier qui nous intéresse car il renvoyait vers la fonction que tu as transformé pour la visibilité !

Mes questions:
Etant donné que tu m'ais proposé 2 fonctions, je rique d'avoir un problème avec mon bouton ? J'ai bien l'impression d'avoir trouvé qqch mais pour remedier à cela ... je me lance, faudra pas me frapper si je suis dans le faux :roll:
document.validation(verifTemp(chpTemps), verifFormulaire())
Enfin, pour lancer mes calcules si les 'if' sont respectés, puis-je directement y mettre un 'else' ?

Indulgence SVP et merci :D