Problème de focus !

Mammouth du PHP | 545 Messages

24 sept. 2007, 14:59

Bonjour,

Je me suis aperçu dans l'une de mes fonction que le retour dans la cellule ne se faisait pas bien que le programme rentre dans le code car l'alert est affiché !
Voici mon code php
<form id="formulaire" name="test" method="post" action="<?php echo $link;?>save">
<input name="datetest" type="text" id="datetest" onBlur="checkdate(this);" value="<?php echo date('d-m-Y'); ?>" size="10" maxlength="10"/>
...
</form>
et mon code JS

Code : Tout sélectionner

function checkdate(objName) { var datefield = objName; if (chkdate(objName) == false) { datefield.select(); alert("La date n'est pas valide !"); MyForm.datetest.focus(); return false; } else { return true; } }
Il y a une autre fonction qui est appelé mais elle est un peu longue et comme je pense savoir qu'elle fonctionne, je ne préfère pas remplir vos écrans :P

Si quelqu'un avait une idée sur la question ... merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 881 Messages

25 sept. 2007, 00:03

Ton formulaire porte le nom de "test" et non de "MyForm"
Ce pourrait t'aider de corriger la chose.

Pour ma part, je ne prends pas de chance, ce genre de commande est toujours bâti avec la déclinaison complète du nom:

document.NomFormulaire.NomBouton.Caractéristique.etc

Code : Tout sélectionner

document.test.datetest.focus(); OU document.forms[0].elements[0].focus();
Soyez artisans de paix

d0m
Mammouth du PHP | 1141 Messages

25 sept. 2007, 08:08

Pour ma part, je ne prends pas de chance, ce genre de commande est toujours bâti avec la déclinaison complète du nom:
utiliser des relatifs permet une meilleur adaptation (changement du nom de l'objet, du formulaire,...) c'est comme l'histoire d'utiliser $_SERVER['PHP_SELF'] au lieu du nom de la page php actuelle.

tu peux utiliser le parent de l'objet par exemple

Code : Tout sélectionner

function checkdate(objName) { var datefield = objName; if (chkdate(objName) == false) { datefield.select(); alert("La date n'est pas valide !"); objName.form.datetest.focus(); return false; } else { return true; } }

Mammouth du PHP | 545 Messages

25 sept. 2007, 10:14

Merci pour vos réponses mais je n'ai pas de retour qui se fait dans le champ bien que le message d'alerte s'affiche ... je ne comprend pas !

Si vous avez encore une idée ... merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

d0m
Mammouth du PHP | 1141 Messages

25 sept. 2007, 11:50

d'après ton code, le message d'alerte apparait si la condition

Code : Tout sélectionner

if(chkdate(objName) == false)
est vérifiée,
c'est à dire que la fonction chkdate renvoie false.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 sept. 2007, 15:24

Juste quelques remarques lexicales... lorsque tu passes "this" à une fonction, ce n'est pas le nom de l'objet que tu transmet, mais l'objet. Du coup le nom du paramètre "objName" peut prêter à confusion.

En l'occurence et à partir de là, le fait d'avoir une référence vers le champ dans ta fonction te permet facilement d'y positionner le focus :

Code : Tout sélectionner

objName.focus()
Pas besoin de variable temporaire, de remonter dans le formulaire, ou autre. De même tu peux faire un objName.select()

Enfin, avoir deux fonctions nommées checkDate et chkDate, c'est pas franchement judicieux pour s'y retrouver... vous n'êtes pas à 10 caractères près pour donner des noms explicites et détaillés à vos fonctions. Vous verrez que dans 2 mois, 3 ans, ou quand vous tomberez sur le code d'un autre, une nomenclature intuitive (et pas avec 27 fonctions qui portent le même nom à une lettre près ;)), ça vous simplifiera la vie :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 545 Messages

26 sept. 2007, 00:30

Salut à tous et merci pour votre aide,

Dans les propositions que vous me faites, aucune ne fonctionne et pourtant j'ai l'intime conviction que vous avez raison ... ! Juste que d0m a certainement une idée mais que je ne sais pas décodé à cause de mon niveau de programmation ! ! !

Ryle,
Tu as raison quand tu dis que le code est difficile a décrypter mais c'est un code que j'ai récupérer, adapter et inclus à mon code. Malheureusement, je n'ai plus l'url exacte du téléchargement mais juste un morceau que j'ai laissé en tête de code:
<!-- Original: Mike Welagen ([email protected]) -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
N'ayant pas les capacités pour en avoir la paternité ... !

Merci pour tout
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!