11550 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour,

Je débute en javascript, merci de votre indulgence.

J'ai une fonction qui affiche une ligne vide dans un tableau pour création d'une nouvelle ligne. Cette ligne comprend un bouton valid et annul qui me permettent de créer ou abandonner l'envoi du formulaire.

Sur la validation, j'ai un controle du remplissage des zones, mais je ne comprends pas comment ressortir de ce controle si toutes les zones ne sont pas renseignées sans quitter ma fonction de création. Je souhaite redonner la main pour finir ou annuler la création. Voici mon code :


function creTab(numlig, pag){
	
	// gestion des navigateurs (IE, MOZ, NS)
	nav = navigator.appName;
	if (nav == 'Microsoft Internet Explorer')
		nav ='ie';

	var idlig = 'lign['+ numlig +']';
	var nvcod = 'co['+ numlig +']';

	//Nom des boutons annuler et valider
	var annul = 'ann['+ numlig +']';
	var valid = 'val['+ numlig +']';
	var btnVal = document.getElementById("vali");
	var btnAnn = document.getElementById("annu");
	
	document.getElementById(valid).style.display = 'block';
	document.getElementById(annul).style.display = 'block';
	btnVal.disabled = false;
	btnAnn.disabled = false;
	if (pag == "page64.php")
		document.getElementById('tabbis').style.display = 'block';
	
	if(nav == 'ie'){	
		document.getElementById(idlig).style.display = 'block';
	}
	else
	{
		document.getElementById(idlig).style.display = 'table-row';
	}
	document.getElementById(nvcod).focus();
	
	document.getElementById(valid).onclick = function ()
	{
		verifForm(pag, 'formc');
		if(zonevide.length > 0)
		{
			alert('le champs '+ zonevide[0] + ' doit être renseigné');
			document.getElementById(nvcod).focus();
			return false;
		}
		document.getElementById('formc').action = pag;
		document.getElementById('formc').submit();
	};
	
	//Appui sur Annul
	document.getElementById(annul).onclick = function ()
	{
		document.getElementById(valid).style.display = 'none';
		document.getElementById(annul).style.display = 'none';
		btnVal.disabled = true;
		btnAnn.disabled = true;
		document.getElementById(idlig).style.display = 'none';
	};
}


Je pense que le return false n'est pas la bonne solution, la ligne se créant à blanc si j'appuie ensuite sur annul.
Bonjour,

je crois que je n'ai pas tout compris mais j'ai quelques remarque :

as tu pensé utiliser un librairie comme prototype ou jquery?
peux tu te mettre a notre place et lire ton post ?
comment veux tu que l'on t'aide si on ne te comprends pas?
Je te remercie pour tes remarques, mais j'ai essayé d'être claire, dsl que tu ne me comprennes pas.

Je dois me pencher sur les librairies, mais j'aimerais auparavant maitriser un peu plus le js de base, afin de comprendre un minimum les fonctions que j'utilise.

En fait, mon problème est de stopper ma validation si un controle est faux. Est-ce qu'il faut un return, un break ou je ne sais quoi ??
Bonjour pourquoi ne pas mettre un else tout simplement ?

document.getElementById(valid).onclick = function ()
{
	verifForm(pag, 'formc');
	if(zonevide.length > 0){
		alert('le champs '+ zonevide[0] + ' doit être renseigné');
		document.getElementById(nvcod).focus();
	}else{
		document.getElementById('formc').action = pag;
		document.getElementById('formc').submit();
	}
};
ah euh sinon si ton bouton valid est un élément html input de type submit, il est obligatoire de mettre un return false pour arrêter l'événement de soumission du formulaire.
Le else sans return ne suffit pas, ma fonction cretab continue son chemin sans tenir compte du test.

Mon bouton est juste un <Button> qui me sert à envoyer mon formulaire par le biais du js.
c'est normal que ta fonction continue.

Tu devrais séparé ceci en 2 fonctions, 1 pour initialisé tes événements avec les onclick,
et une autre pour traiter les bonnes valeurs du formulaires.

On ne peut pas faire les deux en même temps.
Je vérifie mes données par la fonction verifForm() et bloque la validation si le résultat ne me convient pas.
Je ne comprends pas le fait qu'il soit impossible de me remettre en position de validation/annulation si mon formulaire n'est pas correct. Comment puis je séparer plus les 2 actions, elles sont liées l'une à l'autre ..?
franchement toujours pas compris.
que veux TU faire avec : creTab(numlig, pag) ?
je ne te demande pas ce que ça fait, je te demande ce que tu veux faire et en french....
que veux tu faire avec verifForm()?

Si c'est un contrôle de validation que tu veux, voila ce que je te propose :

la fonction validation, prend tout les champs a tester, verifie si ok ou non, remplit un tableau avec les erreurs. s'il y a des erreurs, affiche l'erreur et ne fait rien, sinon envoi du formulaire (avec un submit())

la fonction annulation, prend tout les champs et les réinitialises.

est ce que c'est ca que tu veux?
Je remplis un tableau avec les erreurs, les signale (alert(...) et souhaite que l'utilisateur puisse reprendre sa saisie erronée !
si c'est la fonction verifForm qui teste les erreurs, assure toi qu'elle renvoi l'erreur (return false par ex) et test l'erreur.

sinon dit moi qu'elle fonction fait l'alert, ou mieux donne plus de code :

afin que l'on puisse tester et repondre au mieux....
Le code, c'est celui donné en 1er post. Et voici celui de la fonction verifForm()


function verifForm(pag,formula)
{
	var formu = document.getElementById(formula);
	var nb = formu.elements.length;
	nb = nb-2;
	var listFac = new String('page67.php-elements[2]','page68.php-elements[2]','page68.php-elements[3]','page122.php-elements[2]','page122.php-elements[3]','page122.php-elements[4]');
	zonevide = new Array (); 
	for(i=0;i<nb;i++) 
	{ 	
		var zon = pag + '-elements['+i+']';
		if((formu.elements[i].value == '' || (!/[a-zA-Z0-9]/.test(formu.elements[i].value) && formu.elements[i].value != '%')) && listFac.indexOf(zon)==-1)
		{
			zonevide.push(i);
		}
	}
	return zonevide;
}


L'alert est dans le 1er post[/i][/i][/i]
ben voila maintenant j'ai compris maintenant....
si tu defini une variable dans une fonction, elle n'existe pas en dehors..

essaye ca :

	document.getElementById(valid).onclick = function ()
	{
		var zonevide = verifForm(pag, 'formc');
		if(zonevide.length > 0)
		{
			alert('le champs '+ zonevide[0] + ' doit être renseigné');
			document.getElementById(nvcod).focus();
			return false;
		}
		document.getElementById('formc').action = pag;
		document.getElementById('formc').submit();
	};


as tu entendu parlé de porté de variable???
evite d'utilisé les variable global
si zonevide est defini dans une fonction, cela ne veux pas dire qu'elle est defini n'importe ou dans le code.

si tu definie des affectations sur evenement, les variables utilisé dedans n'existe peut etre pas en dehors. example :


//Appui sur Annul

	document.getElementById(annul).onclick = function ()
	{
		document.getElementById(valid).style.display = 'none';
		document.getElementById(annul).style.display = 'none';
		btnVal.disabled = true;
		btnAnn.disabled = true;
		document.getElementById(idlig).style.display = 'none';

	};

tes variables btnVal et btnAnn sont defini ou?
ce sont pas des variables globaux vue quel sont defini dans la fonction
function creTab(numlig, pag).

Comment veux tu que cela fonctionne?
le javascript est particulier, il faut vraiement comprendre ce que l'on fait...
Ces variables sont définis au début de cretab, ce sont des boutons trouvés par un getElementById.

J'essaie vraiment de comprendre, c'est pour cela que je demande de l'aide. Ma fonction peut surement s'écrire en moins de lignes, mais je détaille pour comprendre ce que je fais et comment ça fonctionne.
Mais mon action sur evenement onClick est à l'intérieur de ma fonction creTab(), donc mes variables ont déjà été initialisées. Je ne comprends pas ce que tu veux dire.

De même, ma variable zonvide est retournée par verifForm, et est bien renseignée(d'après firebug), donc mon problème ne me semble pas venir de là.
C'est bien de poser une question quand on ne sais pas, mais c'est mieu de chercher un peux avant quand meme.
Je dit pas que c'est facile, mais bon....

ce n'est pas parce que tu nomes des variables de la meme maniere n'importe ou que c'est forcement la meme variable. il faut faire des tuto et lire des choses pour comprendre.

quand tu cree une variable dans un bloc, elle n'existe pas en dehors du bloc.
donc si tu fait un



function init(){
 var test = 4;
}
init();
alert(test);


tu auras une erreur parce que test n'est pas defini.
et ce n'est pas parce que test existe dans init que test existera en dehors...


documente toi sur javascript et la porté des variables.
ces variables sont definit au debut de create tab, mais pas dans la fonction document.getElementById(valid).onclick.

ta fonction verifForm retourne mais tu ne teste pas ce retour. tu teste une varible zonevide qui n'est jamais initialise.
excuses moi, mais je suis un peu tétue (ou bornée..) Smiley confus

Ma variable zonevide est déclarée en tant que variable globale (pas de var devant lors de l'initialisation) ce qui fait qu'elle me rapporte bien le résultat de verifForm.

La fonction annul et valid sont inclues dans cerTab() où sont définies mes variables, en tant que variables locales, mais s'appliquant à toute la fonction.

Je lis les tuto, j'ai 4 bouquins ouverts devant moi, et je pose des questions quand je doute ou ne trouve pas la solution de mon problème.

Je vais tenter de réécrire tout ça en me seervant de prototype, ce qui me simplifiera peut-être la chose. J'ai d'ailleurs découvert l'existence de evt.preventDefault(), peut-être est-ce la solution pour arrêter ma fonction de validation et reprendre au focus de ma zone....

Merci de m'avoir consacré du temps, et je suis dispo pour avoir encore de tes lumières.
écrire avec un framework ne t'aideras pas à résoudre ton problème. Il faut d'abord que tu comprennes bien javascript pour utilisé un framework.

Sinon tu l'utiliseras mal.

De plus ici ton code est bon, le problème est apparemment un problème de logique.
Problème que tu auras donc aussi en changeant pour prototype.

Malheureusement je pense mal comprendre le problème que tu as et du coup je ne sais pas trop comment t'aider à avancer.

Peut-être en réexpliquant le problème plus simplement, ou en donnant une url de ta page. (ça, ça serait bien.)

Bon courage Smiley murf (rah la galère du javascript)
Modifié par masseuro (20 Apr 2009 - 15:46)
le site n'est pas en ligne, je ne peux donc pas te donner d'url.

Je vais reéssayer d'être claire.

J'ai une page html - php avec un tableau et des boutons. Sur le clic d'un boutons créer apparait une ligne (un formulaire à elle seule) qui contient toutes les zones à rajouter dans ma bdd, ainsi que 2 boutons annul et valid.
2 autres boutons deviennet aussi actifs, pour pouvoir valider ou annuler ailleurs (cette partie étant redondante avec le code déjà écrit, je l'ai supprimée pour diminuer le code à déchiffrer). => 2 boutons qui ont l'air de sortir de nulle part, mais non !!

sur le clic d'1 de mes boutons de validation, je souhaite vérifier que toutes mes zones sont bien renseignées, et ensuite poster le formulaire. Mais si certaines zones sont vides, rendre la possibilité à l'utilisateur de corriger et renvoyer, ou annuler.

mais alors, le bouton annuler me soumet mon formulaire mal renseigné. Enfin, pour être plus précise, le bouton annuler du formulaire, pas celui présent en bas... Smiley decu

je ne suis pas sure d'analyser correctement où a lieu le pb, mais voilà ce que je peux dire de + clair Smiley ohwell

merci de ton aide
suppression de post...
je devrais lire avant d'ecrire...

as tu des input type='submit' pout tes boutons?
Modifié par blackkus (20 Apr 2009 - 16:13)
Pages :