Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

boucle while

13 réponses
Avatar
Paulo
Bonjour,
Je voudrais savoir si il est possible dans un while d'avoir un point
d'arrêt et d'executer une commande avec un bouton par exemple.
Quand on appuie sur le bouton la commande s'execute et a la fin de la
commande la boucle repart jusqu'a son point d'arret.
Merci pour vos réponses

10 réponses

1 2
Avatar
Mickaël Wolff
Paulo a écrit :

Je voudrais savoir si il est possible dans un while d'avoir un point
d'arrêt et d'executer une commande avec un bouton par exemple.



C'est possible, en mettant en place un gestionnaire d'événement
synchrone. Je ne sais pas s'il existe un outil natif en javascript.

Le principe d'un tel gestionnaire :

=== 8< == var app = function()
{
this.events = new eventHandler ;
this.events.attach('hearth beat', moveon) ;
this.events.attach('hearth beat', lookout) ;

this.run = function()
{
do {
/* ... */

if(this.events.is_managing('hearth beat'))
this.events.raise('hearth beat') ;

/* ... */
} while(true) ;
/* crados, pour explication uniquement car ça va faire
* mouliner le navigateur
* regarde du côté de setTimeoOut.
*/
}

var lookout = function()
{
/* ... */
}

var moveon = function()
{
/* ... */
}
}
=== 8< ==
Ensuite, si tu veux un gestionnaire asynchrone, ce sera un peu plus
coton (bidouille en détournant les événements DOM), sauf s'il y a une
technique native à javascript.


--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
SAM
Paulo a écrit :
Bonjour,
Je voudrais savoir si il est possible dans un while d'avoir un point
d'arrêt et d'executer une commande avec un bouton par exemple.
Quand on appuie sur le bouton la commande s'execute et a la fin de la
commande la boucle repart jusqu'a son point d'arret.
Merci pour vos réponses



function commande() {
alert('je suis l'exe de la commande');
var k = 0;
while( k >= 0 ) {
alert('k = '+k);
k++;
if(k == 3) // point d'arrêt
{
commande();
break;
}
}
}

Mais attention là ça va boucler indéfiniment

Prévoir un truc de stop

if(k == 3) // point d'arrêt
{
if(confirm('Relancer ?')) commande();
break;
}
}

demo :
<http://cjoint.com/?iExJNUsnVP>
(voir code source du cadre bas)

--
sm
Avatar
SAM
SAM a écrit :
Paulo a écrit :
Bonjour,
Je voudrais savoir si il est possible dans un while d'avoir un point
d'arrêt et d'executer une commande avec un bouton par exemple.





Le point d'arrêt c'est : break;

Quand on appuie sur le bouton la commande s'execute et a la fin de la
commande la boucle repart jusqu'a son point d'arret.





en tentant de comprendre ce qu'il est écrit, peut-être ceci :

JS :
===
function test(point_arret) {
var k = 0;
while( k >= 0 ) {
alert('k = '+k);
k++;
if(k == point_arret) // point d'arrêt
{
break;
}
}
}

function commande(point_arret) {
if(!point_arret) alert('stop !');
else {
alert('je suis l'exe de la commande');
alert('fin de commandenje relance maintenant le while');
test(point_arret);
}
}

HTML :
===== <a href="javascript:test(2)">commencer le test</a> puis continuer avec :
<button onclick="commande(prompt('définir point d'arrêt :',3))">
commande
</button>


--
sm
Avatar
Paulo
SAM a écrit :
> en tentant de comprendre ce qu'il est écrit, peut-être ceci :

J'avais pensé à alert() qui bloque le déroulement d'un script mais ça ne
convient pas pour ce que je veux faire:
en gros et en simplifiant j'affiche les jours de la semaine en partant
de la date du jour et je veux a l'aide d'un bouton ou autre chose
incrémenter une variable de 7 pour que le script affiche les 7 jours
suivant et ainsi de suite.
Mon problème est que cette variable modifiée soit prise en compte au
prochain appel du script.
Mon script en fonctionne au premier appel en passant la variable par
l'URL je l'incrémente en fin de script, je la met en global, et quand je
rappelle le script elle est toujours à sa valeur initiale.
C'est pour ça que j'ai pensé à une bonne vielle boucle de certain langage...
Avatar
Laurent vilday
Paulo :
J'avais pensé à alert() qui bloque le déroulement d'un script mais ça ne
convient pas pour ce que je veux faire:



alert() ne convient de toute façon jamais pour aucune action.

Que des inconvénients pour aucun avantage :
- bloque exécution des scripts
- fait peur aux users lambdas
- pas adapté au debug
- pas customisable
- pas un seul UA qui affiche la chose de la même manière
- etc.

IMO alert() ne doit jamais être utilisé.

en gros et en simplifiant j'affiche les jours de la semaine en partant
de la date du jour et je veux a l'aide d'un bouton ou autre chose
incrémenter une variable de 7 pour que le script affiche les 7 jours
suivant et ainsi de suite.
Mon problème est que cette variable modifiée soit prise en compte au
prochain appel du script.



"prochain appel du script" dans le même document lors de la même session
de navigation ou "prochain appel" genre 2 mois plus tard quand on
revient sur la même page ?

Mon script en fonctionne au premier appel en passant la variable par



Donc tu as un script, on peut voir ?

l'URL je l'incrémente en fin de script, je la met en global, et quand je
rappelle le script elle est toujours à sa valeur initiale.



Donc elle n'est pas globale au document. Peut être que tu recharges le
document et donc là effectivement la définition précédente de ta
variable est immanquablement abandonnée, fort heureusement je dirais.

Je crois que tu mélanges quelques notions là, tu pourrais nous montrer
un morceau du code que tu as actuellement, histoire de comprendre ce que
tu fais et ce que tu veux ?

C'est pour ça que j'ai pensé à une bonne vielle boucle de certain
langage...



Toujours pas compris ni le besoin ni le problème.

--
laurent
Avatar
SAM
Paulo a écrit :
SAM a écrit :
> en tentant de comprendre ce qu'il est écrit, peut-être ceci :

J'avais pensé à alert() qui bloque le déroulement d'un script mais ça ne
convient pas pour ce que je veux faire:
en gros et en simplifiant j'affiche les jours de la semaine en partant
de la date du jour et je veux a l'aide d'un bouton ou autre chose
incrémenter une variable de 7 pour que le script affiche les 7 jours
suivant et ainsi de suite.



Alors on a :
- une fonction d'affichage d'un jour donné et les 6 suivants

function affiche(ceJour) { alert(ceJour); }

- et une fonction pour ce jour puis les prochains par pas de 7 jours

function definir() {
// au 1er appel on crée une globale à valeur '0'
if(typeof monJour == 'undefined') {
monJour = 0;
}
// aux appels suivants on l'incrémente de 7
else {
monJour += 7;
}
// date d'aujourd'hui
var ceJour = new Date();
// date voulue (aujourd'hui + monJour)
ceJour = new Date(ceJour.setDate(ceJour.getDate() + monJour));
// on lance le calendrier
affiche(ceJour);
}

Mon problème est que cette variable modifiée soit prise en compte au
prochain appel du script.
Mon script en fonctionne au premier appel en passant la variable par
l'URL



Quelle variable ? et pourquoi par l'URL ?
Le jour d'aujourd'hui ne va pas ?

je l'incrémente en fin de script, je la met en global,



ce que fait : 'definir()' ci-dessus (variable 'monJour').

et quand je
rappelle le script elle est toujours à sa valeur initiale.



??? alors tu as oublié de re-préciser ta globale, non ?

C'est pour ça que j'ai pensé à une bonne vielle boucle de certain
langage...



La boucle est pour définir les 7 jours, pas besoin de break

function affiche(ceJour) {
var t = '';
for(var i=0; i<7; i++) {
t += new Date(ceJour.setDate(ceJour.getDate() + 1))
t += 'n';
}
alert(t);
}

ou :

function affiche(ceJour) {
var t = '',
i = 0;
while( i<7) {
t += new Date(ceJour.setDate(ceJour.getDate() + 1))
t += 'n';
i++;
}
alert(t);
}



Sinon .. une seule fonction :

function rataDatum() {
monJour = (typeof monJour == 'undefined')? 0 : monJour+7;
var ceJour = new Date();
ceJour = new Date(ceJour.setDate(ceJour.getDate() + monJour));
var t = '';
for(var i=0; i<7; i++) {
t += new Date(ceJour.setDate(ceJour.getDate() + 1))
t += 'n';
}
alert(t);
}


Tout pour dates et calendriers :
<http://www.merlyn.demon.co.uk/js-dates.htm>

--
sm
Avatar
Pascal PONCET
Paulo a écrit :
Mon problème est que cette variable modifiée soit prise en compte au
prochain appel du script.



Bonjour,

A mon avis, le plus simple (si la fonctionnalité doit être gérée
entièrement du côté client) c'est de passer par un formulaire.

Cinématique :
1. stocker une valeur initiale dans un champs input (éventuellement
invisible). Ca peut être en dur dans le Html (attribut "value" du champ).
2. appeler une fonction genre "goDateMachinTruc()" qui va :
a. chercher la valeur stockée en (1) et la copier dans une variable
locale genre "laDateDemandee".
b. faire son principal boulot (genre afficher le calendrier
correspondant à la date demandée).
c. incrémenter la variable "laDateDemandee".
d. stocker la nouvelle valeur dans le champs input du (1).

Mais une boucle, perso, je vois pas l'utilité !

De plus, si un traitement est effectué côté serveur, on peut suivre la
même piste, puisque la valeur pourrait être récupérée en post ou en get,
avec un submit du formulaire.

Cordialement,
Pascal
Avatar
Paulo
Pascal PONCET a écrit :
Paulo a écrit :
Mon problème est que cette variable modifiée soit prise en compte au
prochain appel du script.





J'ai fait des vagues pour rien, mon script marche maintenant je vous
parle pas de l'erreur que j'avais fait parce que vous allez rire et vous
faire mal a la rate.

Par contre pour faire défiler mes pages de semaine en semaine j'utilise
<a href... avec un paramètre. Plutôt que ce lien je voudrais utiliser
les flèches de direction pour semaine suivante et semaine précédente et
là je pense que seul le javascript peut le faire.
Si vous avez avez des suggestions merci d'avance.
Avatar
Pascal PONCET
Paulo a écrit :
Par contre pour faire défiler mes pages de semaine en semaine j'utilise
<a href... avec un paramètre. Plutôt que ce lien je voudrais utiliser
les flèches de direction pour semaine suivante et semaine précédente et
là je pense que seul le javascript peut le faire.



Ok, mais la question de base est de savoir comment est construite la
page lorsqu'on clique sur le bouton "suivante" ou "précédente" : par un
script client (JS) ou serveur (PHP si j'ai bien suivi) ?
Avatar
Paulo
Pascal PONCET a écrit :
Ok, mais la question de base est de savoir comment est construite la
page lorsqu'on clique sur le bouton "suivante" ou "précédente" : par un
script client (JS) ou serveur (PHP si j'ai bien suivi) ?



Quand je clique sur suivant ou précédent je recharge ma page qui est en
php, avec un paramètre positif ou négatif passé dans l'url.
<a href="mapage.php?date=$dateplus">
<a href="mapage.php?date=$datemoins">
voili...
1 2