11548 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

Non (décidément Smiley smile )

Petit rappel des bases : l'attribut onsubmit est en réalité une fonction Javascript ; si cette fonction renvoit false, le formulaire correspondant n'est pas soumis.

Dans ton cas, pour faire renvoyer false à ton onsubmit, tu as le choix. Comme ça :
<form onsubmit="valider_form(); return false">
/* ce qui revient à dire "exécute valider_form(), puis renvoie false" */
ou bien comme ça :
function valider_form(){
  ...
  return false;
}

<form onsubmit="return valider_form();">
/* ce qui revient à dire "renvoie la valeur renvoyée par valider_form()" */

En revanche, renvoyer false, true, 'parpaing' ou 3.1415 ici :
xhr_object.onreadystatechange = function() {
    ...
    return ...;
}
... n'aura strictement aucun effet. Il s'agit d'une fonction anonyme (fonction(){})dont personne n'attend une valeur de retour. Cela ne revient absolument pas à renvoyer false dans valider_form() qui, si tu as bien suivi le principe de l'ajax, aura fini de s'éxécuter depuis belle lurette.
Modifié par marcv (02 Jun 2009 - 15:54)
J'oubliais :
a écrit :
Mais dans la version final ce sera soit return false, soit return true en fonction de form.php
Dans ce cas là il faudra que ta requête soit synchrone, comme te l'a expliqué masseuro au début du sujet.
Salut,

sinon, juste histoire d'embêter le monde ( Smiley lol ), à quoi sert ajax dans ton cas ? Ne serait-ce pas plus simple de faire tes tests en simple JavaScript (en les doublant de toute façon côté serveur) ?
Merci de ta patience. Smiley smile

Dans un post precedent tu as dit :
marcv a écrit :

Moralité : tout ce que tu veux effectuer après réception de la réponse doit se trouver dans le bloc suivant :
xhr_object.onreadystatechange = function() {
    if (xhr_object.readyState == 4) {
        /*...*/
    }
};
C'est la seule et unique partie du code qui va attendre la réponse pour s'exécuter.


ce qui m'a parue logique.

Ici c'est le cas, j'ai besoin de la reponse pour s'avoir si j'envoie le formulaire ou si je dis a l'internaute "attention: le formulaire est mal rempli"

Je ne peux pas faire return true ou return false avant d'avoir la réponse.
Heyoan a écrit :
Salut,

sinon, juste histoire d'embêter le monde ( Smiley lol ), à quoi sert ajax dans ton cas ? Ne serait-ce pas plus simple de faire tes tests en simple JavaScript (en les doublant de toute façon côté serveur) ?


oui, mais c'est juste pour comprendre.
Et ne connaissant pas trop javascript, mais me débrouillant bien en php. Je me suis dit que ça pouvait être pratique sans devoir apprendre le javascript
Smiley cligne
yann123 a écrit :
oui, mais c'est juste pour comprendre.
Ah OK.

yann123 a écrit :
Et ne connaissant pas trop javascript, mais me débrouillant bien en php. Je me suis dit que ça pouvait être pratique sans devoir apprendre le javascript
Ben comme tes INPUT sont bien fichus avec l'id qui va bien pour les LABEL associés ce serait par exemple :
function valider_form() {
	var prix_mini = document.getElementById("prix_mini").value;
	var prix_maxi = document.getElementById("prix_maxi").value;
	if(prix_mini > prix_maxi) {
		alert('Prix mini doit être inférieur a prix maxi !');
		return false;
	}
	return true;
}
Au passage l'attribut name est inutile pour l'élément FORM et c'est INPUT type="image" (sans majuscule). Smiley cligne
a écrit :
j'ai besoin de la reponse pour s'avoir si j'envoie le formulaire ou si je dis a l'internaute "attention: le formulaire est mal rempli"
Si vraiment ça se limite à vérifier que prix_mini est inférieur à prix_maxi, je suis d'accord avec Heyoan, une requête en Ajax est inutile et de surcroît plus lente que la validation en js "client", qui prendra une nano seconde.

En revanche, si l'appel à un fihier PHP est justifié (vérification dans une base de données, par exemple), tu peux tout simplement faire :
<form onsubmit="return valider_form();">
/* valider_form() renverra false dans tous les cas, ce */
/* qui revient à annuler la soumission quoi qu'il arrive */

function valider_form(){
    ...
    xhr_object.onreadystatechange = function() {
        if(xhr_object.readyState == 4) {
	    ...
            if (tout va bien) {
                monform.submit(); /* soumission du form via javascript */
            } else {
                alert('on ne passe pas');
            }	 
	}
    ...
    /* on annule la soumission du formulaire lors du clic*/
    return false;
}

En synchrone ça fonctionne.

Je pense avoir compris (a voir lors de futur utilisation).

Pour ce qui est de mon formulaire je vais voir si j'arrive (avec mes petites connaissance du javascript) a tous valider directement en javascript (avec toutes les infos que l'on trouve sur le web je devrais m'en sortir).

Merci de vos réponses.
Pages :