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

equivalent javascript d'un window.confirm

6 réponses
Avatar
WebShaker
salut.

est ce que quelqu'un aurait une idée de comment je pourrait refaire un
window.confirm.

je crée un div avec un formulaire dedans ayant 2 bouton Yes et No.
j'aimerai attendre que l'utilisateur ai cliqué sur l'un des 2 boutons avant
de poursuivre l'execution du javascript !!!!

Je ferai bien une boucle en attendant que l'utilisateur réponde, mais cela
va bloquer entièrement la page !!!
une idée?

merci
Etienne

6 réponses

Avatar
Olivier Miakinen
Le 18/02/2010 17:02, WebShaker a écrit :

je crée un div avec un formulaire dedans ayant 2 bouton Yes et No.
j'aimerai attendre que l'utilisateur ai cliqué sur l'un des 2 boutons avant
de poursuivre l'execution du javascript !!!!

une idée?



onclick="appel de la fonction qui contient la suite du code"

<h.s.>
Tu es allé voir mes réponses dans fr.comp.lang.regexp ?
</h.s.>
Avatar
WebShaker
Le 18/02/2010 18:55, Olivier Miakinen a écrit :
Le 18/02/2010 17:02, WebShaker a écrit :

je crée un div avec un formulaire dedans ayant 2 bouton Yes et No.
j'aimerai attendre que l'utilisateur ai cliqué sur l'un des 2 boutons avant
de poursuivre l'execution du javascript !!!!

une idée?



onclick="appel de la fonction qui contient la suite du code"

<h.s.>
Tu es allé voir mes réponses dans fr.comp.lang.regexp ?
</h.s.>



salut.

oui je suis allé voir mais j'ai pas eu le temps de tester ta proposition.
pour le moment j'ai fait un truc pas terrible qui utilise deux
expressions régulières distincts.

Mais j'aimerai bien progresser en expressions régulières alors je vais
essayer ta proposition...

pour la question javascript.
je crois que ce n'est pas possible de faire ce que je veux faire.
A savoir arrèter un script en attendant une réponse.

la seule solution que j'ai trouvé sur le net consiste:
- a ouvrir mon popup
- puis le reste du script boucle en lançant des timeout en attendant que
le popup est renvoyé une réponse.

c'est pas terrible, mais bon ca fera l'affaire :)
Etienne
Avatar
Olivier Miakinen
Le 19/02/2010 11:36, WebShaker a écrit :

[H.S. fr.comp.lang.regexp]

oui je suis allé voir mais j'ai pas eu le temps de tester ta proposition.
pour le moment j'ai fait un truc pas terrible qui utilise deux
expressions régulières distincts.



Ma « proposition », c'était juste quelques idées en l'air, en attendant
que tu précises bien les cas possibles et ce que tu veux faire au juste.
Quand ce sera clair je pourrai mieux t'aider, mais bon, merci de ne pas
continuer cette discussion ici, je n'aurais pas dû mélanger les deux.

pour la question javascript.
je crois que ce n'est pas possible de faire ce que je veux faire.
A savoir arrèter un script en attendant une réponse.



Ben si : le script s'arrête quand il arrive au bout, et le onclick de la
réponse lance la suite du traitement.

la seule solution que j'ai trouvé sur le net consiste:
- a ouvrir mon popup



Ah, toi aussi tu as un popup ? À moins que tu veuilles parler d'une
simple boîte de dialogue. Si c'est une vraie fenêtre popup, je te fais
la même remarque qu'à Alain : méfie-toi que tout le monde n'accepte pas
les popups, et que donc tu risques qu'elle ne s'ouvre pas (premier cas)
ou qu'elle remplace la fenêtre appelante (second cas).

- puis le reste du script boucle en lançant des timeout en attendant que
le popup est renvoyé une réponse.



Je ne vois pas la simplification, parce que le fonctionnement avec
timeout est exactement le même que celui avec onclick ! Le code appelant
s'arrête définitivement, et c'est une nouvelle fonction qui sera appelée
à l'expiration du délai.
Avatar
Laurent vilday
WebShaker :
Olivier Miakinen :
WebShaker :

je crée un div avec un formulaire dedans ayant 2 bouton Yes et No.
j'aimerai attendre que l'utilisateur ai cliqué sur l'un des 2 boutons
avant
de poursuivre l'execution du javascript !!!!

une idée?







Des tonnes :)

onclick="appel de la fonction qui contient la suite du code"





Oui par exemple. Mais comme toujours tout dépend du contexte..

je crois que ce n'est pas possible de faire ce que je veux faire.



:) Ne baisses pas les bras si vite.

A savoir arrèter un script en attendant une réponse.



Effectivement, arrêter un script en cours d'éxécution non c'est pas
possible. Ceci dit, je ne pense pas que ce soit ce que tu veux.
IMO tu veux :
1) afficher une boite de dialogue (modale si possible)
2) y placer au moins un texte explicatif
3) y ajouter des boutons
4) faire disparaitre la boite lorsqu'un bouton est cliqué
*ET* déclencher la fonction associée (d'où le onclick de Olivier)

<http://mokhet.com/tests/dialogue.html>

la seule solution que j'ai trouvé sur le net consiste:



Le net ne propose IMHO aucune solution viable dès qu'il s'agit de
javascript. Ici c'est mieux et ton information sera un peu plus exacte
que les saloperies et fausses informations qu'on trouve sur le web.

- a ouvrir mon popup
- puis le reste du script boucle en lançant des timeout en attendant que
le popup est renvoyé une réponse.



Mon dieu, mon dieu. NON. On ne fait pas des boucles pour attendre des
réponses, jamais dans un navigateur. On prépare les callbacks et on
réagit aux events.

c'est pas terrible, mais bon ca fera l'affaire :)



:( Non ça ne fait pas l'affaire.

Qu'est-ce que tu penses de mon exemple, certes très sommaire (manque
feature detection, optimisation events, gestion nodes plus fine et plein
d'autres trucs) mais ça serait pas mieux que des boucles ? Je peux
expliquer le code si besoin.

<http://mokhet.com/tests/dialogue.html>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Dialogue</title>

<style type="text/css">
.cacher { display:none }
#dlg
{ position:absolute; top:0; bottom:0; left:0; right:0;
background-color:rgba(0,0,0,0.5) }
#dlg > div
{ background-color:#ffffff; border:5px solid #1E64A1;
width:300px; position:absolute; top:150px }
#dlg > div > div > span
{ background-color:#ffffff; border:1px solid #cccccc;
color:#000000; margin:5px; padding:5px; float:left }
#dlg > div > div > span:hover
{ background-color:yellow; cursor:pointer }
</style>
<!--[if IE]>
<style type="text/css">
#dlg { background:#cccccc }
</style>
<![endif]-->

<script type="text/javascript">
var dialogue = function()
{
var
dlg,
map = {};

function createDlg()
{
if ( !dlg )
{
dlg = document.createElement('DIV');
dlg.id = 'dlg';
dlg.className = 'cacher';
dlg.appendChild(document.createElement('DIV'));
dlg.firstChild.appendChild(document.createElement('H1'));
dlg.firstChild.appendChild(document.createElement('DIV'));
document.body.appendChild(dlg);
}
return dlg;
}
return {
hide:function()
{
(dlg || createDlg()).className = 'cacher';
},
open:function(message, buttons)
{
var
i, button, id, left,
node = dlg || createDlg(),
container = node.firstChild.lastChild;
node.firstChild.firstChild.innerHTML = message;
while ( container.firstChild )
{
container.removeChild(container.firstChild);
}
map = {};
for ( i = 0; i < buttons.length; i++ )
{
id = 'button' + i;
button = document.createElement('SPAN');
button.id = id;
button.innerHTML = buttons[i].title;
map[id] = buttons[i].callback;
container.appendChild(button);
}
node.onclick = function(E/*vent*/)
{
var target;
if ( E && E.target )
{
target = E.target;
}
else if ( window.event && window.event.srcElement )
{
target = window.event.srcElement;
}
/*3==document.TEXT_NODE*/
if ( target && target.nodeType == 3 )
{
target = target.parentNode;
}
if ( target && target.nodeName == 'SPAN'
&& target.id in map )
{
dialogue.hide();
map[target.id].call();
}
return false;
};
node.className = '';
left = (node.offsetWidth - node.firstChild.offsetWidth) / 2;
node.firstChild.style.left = parseInt(left, 10) + 'px';
}
};
}();

function test1()
{
dialogue.open(
'Premier dialogue',
[
{title:'Oui', callback:function(){ alert('OUI'); }},
{title:'Non', callback:function(){ alert('NON'); }},
{title:'Maybe', callback:function(){ alert('MAYBE'); }}
]
);
}

function test2()
{
dialogue.open(
'Second dialogue',
[
{title:'FOO', callback:function(){ alert('foo'); }},
{title:'BAR', callback:function(){ alert('bar'); }}
]
);
}
</script>

</head>
<body>
<input type="button" onclick="test1()" value="Dialogue 1">
<input type="button" onclick="test2()" value="Dialogue 2">
</body>
</html>

--
laurent
Avatar
Pascal
Laurent vilday a écrit :
{ position:absolute; top:0; bottom:0; left:0; right:0;
background-color:rgba(0,0,0,0.5) }



Bonjour,

Euh, l'utilisation du modèle colorimétrique RGBA n'est pas un peu tro p
risquée pour l'instant ? (http://www.css3.info/preview/rgba/)
Quelles sont les implémentations sures ?

Cordialement,
Pascal
Avatar
WebShaker
Le 19/02/2010 14:48, Laurent vilday a écrit :
Effectivement, arrêter un script en cours d'éxécution non c'est pas
possible. Ceci dit, je ne pense pas que ce soit ce que tu veux.



Ben si c'est exactement ce que je veux faire.

IMO tu veux :
1) afficher une boite de dialogue (modale si possible)
2) y placer au moins un texte explicatif
3) y ajouter des boutons
4) faire disparaitre la boite lorsqu'un bouton est cliqué
*ET* déclencher la fonction associée (d'où le onclick de Olivier)

<http://mokhet.com/tests/dialogue.html>



En effet ce qui est bien dans ta proposition c'est que j'évite le timeout..

Donc ce que je souhaite c'est faire un contrôle de données avant
d'envoyer un formulaire

a la base un truc du genre
function control()
{
...

if (window.confirm())
{
// faire quelque chose.
}
else
{
// faire autre chose
}
}

Donc finalement je vais opter pour ta solution qui consiste a avoir 3
function

function control()
{
...

dialogue.open(
'Premier dialogue',
[
{title:'Oui', callback:ctrlOK; }},
{title:'Non', callback:ctrlCancel; }}
]
);
}

function crtlOK()
{
// faire quelques chose
}

function crtlCancel()
{
// faire autre chose
}

C'est mieux en effet que mon timeout :)
Merci.