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

Question Oui/Non

17 réponses
Avatar
Gloops
Bonjour tout le monde,

Voici un document HTML d'appel pour test, et une fenêtre popup, pour
poser à l'utilisateur une question à laquelle répondre par oui ou par
non, ce qu'en VB on fait par ret = MsgBox(strQuestion, vbYesNo).

ça fonctionne, sous Firefox sur Windows, je soumets l'ensemble à vos
commentaires pour optimisation, correction d'erreurs de portabilité ou
de lisibilité, autres commentaires ...

Notamment je vois deux questions :
1/ Je peux changer le texte d'un élément Label QuestionToAsk par
this.QuestionToAsk.innerHTML=window.opener.question;
aussi je me serais attendu aussi à pouvoir faire de même avec un bouton,
or là non je dois impérativement utiliser la syntaxe développée :
document.getElementById('Yes').value = strYes;
Est-ce que ça signifie quelque chose qui m'a échappé quant à la
différence entre ces deux contrôles ?
Le fait que dans le premier cas on a affaire à un nœud HTML et dans le
second à un attribut ?

2/ J'ai écrit une fonction à chaque étape :
- dans l'appelant une fonction openPopup pour ouvrir la popup
- dans la popup une fonction à l'ouverture pour traduire les intitulés
- dans la popup une fonction returnfunction pour la fermeture et pour
transmettre les valeurs
- dans l'appelant une fonction followPopup pour exploiter les valeurs
de retour.

Est-il exclu de faire comme dans VB une fonction qui reçoit un intitulé
de question, et qui retourne une valeur de réponse, qu'on pourrait
placer dans l'appelant entre l'instruction à exécuter avant de répondre
à la question, et celle à exécuter après, classiquement un test ?
Il me semble que ça améliorerait la lisibilité. ça aurait du reste sur
le VB l'avantage de plus de souplesse pour les intitulés des boutons.

Je vois qu'après réponse la fenêtre appelante affiche son message un peu
avant que la popup se soit fermée. Serait-il judicieux de mettre une
temporisation à cet endroit ? Le code continuerait-il de s'exécuter une
fois la fenêtre popup vraiment fermée ?

A part ça ma popup met pas loin d'une minute à s'afficher sur ma
machine, mais j'imagine que l'optimisation de cette affaire-là ne relève
pas de Javascript ?

================= TestYesNo.html ============================

<HTML><HEAD>
<TITLE>Test d'appel d'une pop-up</TITLE>
<SCRIPT language="Javascript">
var question;
var ret;
var culture="fr";
function openPopup(arg){
question=arg;
var w = window.open("YesNoQuestion.html", "pop1", "top=150, left=250,
height=250, width=300");
}
function followPopup(){
if(ret)alert("oui");
alert("Fin de traitement openPopup");
}
</SCRIPT>
</HEAD><BODY><form></form>
<input type="button" value="Appel popup" name="call" id="call"
onClick="openPopup('Qu\'est-ce qu\'on dit à la popup ?')" />
</BODY></HTML>


======================= YesNoQuestion.html =========================

<html><head>
<title>Yes/No question</title>
<script language="javascript">
var ret;
function opening()
{
this.QuestionToAsk.innerHTML=window.opener.question;
var strYes = "";
var strNo = "";
switch(window.opener.culture)
{
case "fr":
strYes = "Oui";
strNo = "Non";
break;
default:
strYes = "Yes";
strNo = "No";
}
document.getElementById('Yes').value = strYes;
document.getElementById("No").value = strNo;
}
function returnfunction()
{
window.opener.ret = ret;
this.close();
window.opener.followPopup();
}
</script>
</head>
<body onload="opening();">
<form>
<label id="QuestionToAsk" name="QuestionToAsk">Please allow the
script to ask you a question.</label><br />
<input type="button" value="Yes" name="yes" id="Yes"
onClick="ret=true;returnfunction()" />
<input type="button" value="No" id="No"
onClick="ret=false;returnfunction()" />
</form>
</body>
</html>

10 réponses

1 2
Avatar
Gloops
Le 15/07/2016 à 14:48, Gloops a écrit :
Je vois qu'après réponse la fenêtre appelante affiche son message un peu
avant que la popup se soit fermée. Serait-il judicieux de mettre une
temporisation à cet endroit ? Le code continuerait-il de s'exécuter une
fois la fenêtre popup vraiment fermée ?

Depuis la popup j'ai essayé window.opener.setTimeout("followPopup()",
2000), window.opener.window.setTimeout("followPopup()", 2000), ça
n'appelle rien du tout.
Alors dans l'appelant j'ai mis ça et c'est OK :
function followPopup(){
setTimeout('followPopup2()', 1000);
}
function followPopup2(){
if(ret)alert("oui");
alert("Fin de traitement openPopup");
}
Bien sûr, ça ne réduit pas le nombre de fonctions.
Avatar
SAM
Le 15/07/16 à 14:48, Gloops a écrit :
Bonjour tout le monde,

¿Qué tal?
Voici un document HTML d'appel pour test, et une fenêtre popup, pour
poser à l'utilisateur une question à laquelle répondre par oui ou par
non, ce qu'en VB on fait par ret = MsgBox(strQuestion, vbYesNo).

<script>
function MsgBox(strQuestion,oui,non) {
alert(confirm(strQuestion+'nnOui = OK, Non = Annuler')?oui:non);
}
</script>
<button onclick="MsgBox('Ça va bien ?','Bon! Tant mieux.','J'en suis
désolé')">Hello</button>
ça fonctionne, sous Firefox sur Windows, je soumets l'ensemble à vos
commentaires pour optimisation, correction d'erreurs de portabilité ou
de lisibilité, autres commentaires ...
Notamment je vois deux questions :
1/ Je peux changer le texte d'un élément Label QuestionToAsk par
this.QuestionToAsk.innerHTML=window.opener.question;
aussi je me serais attendu aussi à pouvoir faire de même avec un bouton,
or là non je dois impérativement utiliser la syntaxe développée :
document.getElementById('Yes').value = strYes;

Ha ?
et
document.form[0].Yes.value
ça ne fonctionne pas ?
En tous cas, chez moi :
this.Yes.value = strYes;
this.No.value = strNo;
fonctionne !
(même si je suis surpris que "this.unNom_d_Id" signifie qque chose au JS )
Tu as dû tester sur du code qui avait une coquille ?!
Est-ce que ça signifie que quelque chose m'a échappé quant à la
différence entre ces deux contrôles ?

Tes éléments input ne sont pas dans le FORM ?
Faute de frappe ? (typo)
Le fait que dans le premier cas on a affaire à un nœud HTML et dans le
second à un attribut ?

??? ce sont des IDs pour chaque, non ?
Alors pourquoi ça t'y fonctionnerait 1 coup sur 2 ?
2/ J'ai écrit une fonction à chaque étape :
- dans l'appelant une fonction openPopup pour ouvrir la popup
- dans la popup une fonction à l'ouverture pour traduire les intitulés
- dans la popup une fonction returnfunction pour la fermeture et pour
transmettre les valeurs
- dans l'appelant une fonction followPopup pour exploiter les valeurs
de retour.
Est-il exclu de faire comme dans VB une fonction qui reçoit un intitulé
de question, et qui retourne une valeur de réponse, qu'on pourrait
placer dans l'appelant entre l'instruction à exécuter avant de répondre
à la question, et celle à exécuter après, classiquement un test ?

Pas trop compris la question ... mais si la question est de tout faire
depuis l'opener ce doit être possible. Cependant ça ne peut fonctionner
que SI les 2 fenêtres sont déjà et sont encore ouvertes.
Car là, en l'état, il faut bien attendre que le popup s'ouvre avant
qu'il puisse renvoyer une réponse. (et que donc c'est mieux que ce soit
lui qui lance la fonction-de-réponse de l'opener).
Il me semble que ça améliorerait la lisibilité. ça aurait du reste sur
le VB l'avantage de plus de souplesse pour les intitulés des boutons.

Si tu arrives à franciser le texte du popup à partir de l'opener, je ne
vois pas pourquoi tu n'arriverais pas à aussi franciser les boutons ...
(note que la langue se traite en HTML "normal" avec un soupçon d'aide de
la part du serveur, pas besoin de JS pour ça)
Je vois qu'après réponse la fenêtre appelante affiche son message un peu
avant que la popup se soit fermée.

Mes outils sont trop rapides pour que je puisse voir ça ...
Mais si l'bazarrh fonctionne c'est bien ce qui doit se passer.
Serait-il judicieux de mettre une
temporisation à cet endroit ? Le code continuerait-il de s'exécuter une
fois la fenêtre popup vraiment fermée ?

???
Normalement ... non.
Une fois la fenêtre du popup fermée plus aucun de ses objets
(window.opener par exemple) n'existe !
Même IE avec ses fuites de mémoire respecte ça.
A part ça ma popup met pas loin d'une minute à s'afficher sur ma
machine,

Quelle machine ?
Quel OS ?
Comment sont réglées les préférences du navigateur ? (accepte ou non les
popups)
Combien d'onglets y sont déjà ouverts et que renferment-ils ?
Avec le code simplifié donné en exemple ? (corrigé ? doctype et charset)
Le navigateur a été fermé/quitté puis relancé ?
Idem pour Windows ?
mais j'imagine que l'optimisation de cette affaire-là ne relève
pas de Javascript ?

Ne pas tester sur un engin qui sort (tente de sortir) de veille !
Suspendre l'openGL ?
Préférer tout faire dans la fenêtre déjà affichée (et ne pas enquiquiner
les gensses avec des popups).
================= TestYesNo.html ===========================

<!DOCTYPE html><HTML><HEAD>
<meta charset="utf-8" />
<TITLE>Test d'appel d'une pop-up</TITLE>
<SCRIPT>
var question;
var ret;
var culture="fr";
var pop;
function openPopup(arg){
question=arg;
pop = window.open("YesNoQuestion.html", "pop1", "top0, left%0,
height%0, width00");
}
function followPopup(){
// if(ret)alert("oui");
// mise à jour de rep indépendamment de l'envoi par le popup
// if(pop) ret = pop.rep;
alert(ret?"oui":"non");
alert("Fin de traitement openPopup");
}
</SCRIPT>
</HEAD>
<BODY>
<form>
<input type="button" value="Appel popup" name="call" id="call"
onClick="openPopup('Qu'est-ce qu'on dit à la popup ?')" />
</form>
</BODY></HTML>
======================= YesNoQuestion.html ========================

<!DOCTYPE html><html><head>
<meta charset="utf-8" />
<title>Yes/No question</title>
<script>
var ret;
function opening()
{
var Q = this.QuestionToAsk;
if(Q=úlse) { alert('erreur'); return }
alert('type du node : '+(typeof Q) +'n'+Q.innerHTML);
Q.innerHTML=window.opener.question;
var strYes = "";
var strNo = "";
switch(window.opener.culture)
{
case "fr":
strYes = "Oui";
strNo = "Non";
break;
default:
strYes = "Yes";
strNo = "No";
}
this.Yes.value = strYes;
this.No.value = strNo;
}
function returnfunction()
{
window.opener.ret = ret;
self.close();
window.opener.followPopup();
}
</script>
</head>
<body onload="opening();">
<form onsubmit="return false;">
<label id="QuestionToAsk" name="QuestionToAsk">Please allow the
script to ask you a question.</label>
<input type="button" value="Yes" name="yes" id="Yes"
onClick="ret=true;returnfunction()" />
<input type="button" value="No" name="no" id="No"
onClick="retúlse;returnfunction()" />
</form>
</body>
</html>
Voir (date de 2005/2007 ou même 2001) :
Des popups qui se causent :
http://stephane.moriaux.pagesperso-orange.fr/truc/popup_oui_non/
http://stephane.moriaux.pagesperso-orange.fr/truc/popup_suivi/
utilitaire de création de popup :
http://stephane.moriaux.pagesperso-orange.fr/internet/web_html/java/fenetr/les_popups.htm
Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Gloops
Le 16/07/2016 à 15:59, SAM a écrit :
Le 15/07/16 à 14:48, Gloops a écrit :
Bonjour tout le monde,

¿Qué tal?

Désolé d'être un peu juste pour répondre en Espagnol :)
Ha ?
et
document.form[0].Yes.value
ça ne fonctionne pas ?

Ah, j'avoue que je n'ai pas pensé à mettre ça.
En tous cas, chez moi :
this.Yes.value = strYes;
this.No.value = strNo;
fonctionne !

Je jurerais avoir essayé quelque chose d'approchant. Je me serais gouré
sur la casse ?
(même si je suis surpris que "this.unNom_d_Id" signifie qque chose au JS )

En jQuery on fait même encore plus fort si je ne m'abuse :)
Tu as dû tester sur du code qui avait une coquille ?!
Est-ce que ça signifie que quelque chose m'a échappé quant à la
différence entre ces deux contrôles ?

Tes éléments input ne sont pas dans le FORM ?
Faute de frappe ? (typo)

Peu-être as-tu remarqué ceci, qui est peut-être une forme de réponse par
anticipation ?
</HEAD><BODY><form></form>
<input
Ah, ce qui a pu arriver est que comme je n'ai pas mis Form dans la
syntaxe d'appel, du coup ça ne retourne un résultat que si le contrôle
est en dehors du Form.
Je referai quelques essais dans la journée, pour le moment j'ai un
nettoyage qui prend des ressources ...
Le fait que dans le premier cas on a affaire à un nœud HTML et dans le
second à un attribut ?

??? ce sont des IDs pour chaque, non ?
Alors pourquoi ça t'y fonctionnerait 1 coup sur 2 ?

Hum, voyons voir ...
<label id="QuestionToAsk" name="QuestionToAsk">Please allow the
script to ask you a question.</label>
Pour moi, l'id, c'est QuestionToAsk, alors que "Please allow the script
to ask you a question", ça serait plutôt l'innerHTML, et dans le DOM
l'innerHTML est onsidéré comme un nœud. D'ailleurs, il faudrait que je
révise la syntaxe qui me fait dire ça, j'ai joué avec ça une fois il y a
un an.
Au contraire :
<input type="button" value="Yes" name="yes" id="Yes"
onClick="ret=true;returnfunction()" />
Là, le texte à afficher est stocké dans l'attribut value, qu'il sera
plus difficile de considérer comme un nœud à lui tout seul.
Bon alors après il faudra que je remette les mains dans le cambouis
avant d'en parler plus.
2/ J'ai écrit une fonction à chaque étape :
- dans l'appelant une fonction openPopup pour ouvrir la popup
- dans la popup une fonction à l'ouverture pour traduire les intitulés
- dans la popup une fonction returnfunction pour la fermeture et pour
transmettre les valeurs
- dans l'appelant une fonction followPopup pour exploiter les valeurs
de retour.
Est-il exclu de faire comme dans VB une fonction qui reçoit un intitulé
de question, et qui retourne une valeur de réponse, qu'on pourrait
placer dans l'appelant entre l'instruction à exécuter avant de répondre
à la question, et celle à exécuter après, classiquement un test ?

Pas trop compris la question ... mais si la question est de tout faire
depuis l'opener ce doit être possible. Cependant ça ne peut fonctionner
que SI les 2 fenêtres sont déjà et sont encore ouvertes.
Car là, en l'état, il faut bien attendre que le popup s'ouvre avant
qu'il puisse renvoyer une réponse. (et que donc c'est mieux que ce soit
lui qui lance la fonction-de-réponse de l'opener).

En VB on peut écrire quelque chose comme :
DIM strExemple As String
strExemple = "Un texte"
If MsgBox("Voulez-vous afficher l'exemple ?", vbYesNo) = vbYes Then
MsgBox strExemple
End If
alors qu'en Javascript pour faire la même chose il faut utiliser deux
scripts et écrire quatre fonctions pour faire les liens entre eux.
Est-ce que c'est parce que je ne sais pas faire, ou c'est inévitable ?
Pour ce qui est d'écrire le script de question Oui/Non dans le même
fichier, je ne me représente pas trop, avec un système d'inclusion ça
doit présenter son intérêt. Tu ferais ça comment ?
Enfin il y a alert, mais là si on a des boutons c'est avec les intitulés
standard (true / false, c'est bien ça ?)
Si je l'ai fait dans un autre fichier c'est pour pouvoir faire un
affichage -avec d'autres intitulés de boutons que ceux de alert.
Sinon afficher une boîte de dialogue et ensuite modifier les intitulés
de ses boutons avec un autre programme, j'y ai joué il y a un moment,
mais ... pas en Javascript.
Il me semble que ça améliorerait la lisibilité. ça aurait du reste sur
le VB l'avantage de plus de souplesse pour les intitulés des boutons.

Si tu arrives à franciser le texte du popup à partir de l'opener, je ne
vois pas pourquoi tu n'arriverais pas à aussi franciser les boutons ...

Je l'ai fait, note bien. Tu n'as pas vu ?
La variable culture dans l'appelant est lue depuis la fonction opening,
et si elle vaut "fr" on met "Oui" et "Non", sinon "Yes" et "No".
Tu me diras qu'un switch avec juste une valeur on peut critiquer, mais
comme ça c'est plus facile d'ajouter juste avant le default :
case "de":
strYes = "Ja";
strNo = "Nein";
(note que la langue se traite en HTML "normal" avec un soupçon d'aide de
la part du serveur, pas besoin de JS pour ça)

Exact. En intégrant ça à ASP.Net c'est sûrement ce que je ferai.
Je vois qu'après réponse la fenêtre appelante affiche son message un peu
avant que la popup se soit fermée.

Mes outils sont trop rapides pour que je puisse voir ça ...
Mais si l'bazarrh fonctionne c'est bien ce qui doit se passer.
Serait-il judicieux de mettre une
temporisation à cet endroit ? Le code continuerait-il de s'exécuter une
fois la fenêtre popup vraiment fermée ?

???
Normalement ... non.
Une fois la fenêtre du popup fermée plus aucun de ses objets
(window.opener par exemple) n'existe !
Même IE avec ses fuites de mémoire respecte ça.
A part ça ma popup met pas loin d'une minute à s'afficher sur ma
machine,

Quelle machine ?
Quel OS ?
Comment sont réglées les préférences du navigateur ? (accepte ou non les
popups)
Combien d'onglets y sont déjà ouverts et que renferment-ils ?
Avec le code simplifié donné en exemple ? (corrigé ? doctype et charset)
Le navigateur a été fermé/quitté puis relancé ?
Idem pour Windows ?

Hum ... J'ai fait plusieurs sessions, la dernière dont je me rappelle
avait sept onglets sous Firefox 47.0.1
Mais pour tout dire mon Windows XP a besoin d'un bon nettoyage vite
fait, et pas qu'un peu, c'est clair que ça ne peut pas accélérer
l'exécution.
mais j'imagine que l'optimisation de cette affaire-là ne relève
pas de Javascript ?

Ne pas tester sur un engin qui sort (tente de sortir) de veille !

Ah la sortie de veille j'ai géré il n'y a pas longtemps, c'était sur une
autre machine, pour envoyer une combinaison de touches. Mais là-dedans
il n'y a pas de boîtes de dialogue.
Suspendre l'openGL ?

Tiens, ça c'est probablement un truc qu'il faut que je creuse.
Quand je joue au solitaire, les cartes bougent très bien, et puis à un
moment tout se fige, il faut que j'attende dix secondes, c'est parce que
le programme veut m'afficher un message, de type MsgBox (enfin ...
alert), alors ça lui prend à peu près dix secondes.
Préférer tout faire dans la fenêtre déjà affichée (et ne pas enquiquiner
les gensses avec des popups).

Ah j'ai pratiqué aussi, ça, l'année dernière, une division sur la page
pour afficher une question, du coup il faut la faire suffisamment grande
pour qu'on ne voie que ça, histoire que ça soit clair. Mais en
définitive, pour ce qui est de ne pas enquiquiner les gensses, je me
demande si ce n'est pas un peu raté.
Il est vrai qu'au moins, on évite le risque de la question qui se pose
derrière la fenêtre principale, un peu comme l'agent de police qui irait
se mettre derrière le coffre du côté droit, en se mettant à genoux, pour
parler au conducteur pour lui demander ses papiers. En chuchotant, bien sûr.
Voir (date de 2005/2007 ou même 2001) :
Des popups qui se causent :
http://stephane.moriaux.pagesperso-orange.fr/truc/popup_oui_non/
http://stephane.moriaux.pagesperso-orange.fr/truc/popup_suivi/
utilitaire de création de popup :
http://stephane.moriaux.pagesperso-orange.fr/internet/web_html/java/fenetr/les_popups.htm

J'irai voir ça.
Cordialement,

De même.
Avatar
SAM
Le 17/07/16 à 01:28, Gloops a écrit :
En jQuery on fait même encore plus fort si je ne m'abuse :)

Je sais pas c'que c'est ce jQuery :-(
Peu-être as-tu remarqué ceci,
</HEAD><BODY><form></form>
<input

oui, c'est bien pourquoi je l'évoque.
Ah, ce qui a pu arriver est que comme je n'ai pas mis Form dans la
syntaxe d'appel, du coup ça ne retourne un résultat que si le contrôle
est en dehors du Form.

Je ne crois pas .... as-tu testé avec mon code (corrigé) de tes exemples
? et où le label est dans le form.
Je referai quelques essais dans la journée, pour le moment j'ai un
nettoyage qui prend des ressources ...
Le fait que dans le premier cas on a affaire à un nœud HTML et dans le
second à un attribut ?

??? ce sont des IDs pour chaque, non ?
Alors pourquoi ça t'y fonctionnerait 1 coup sur 2 ?

Hum, voyons voir ...
<label id="QuestionToAsk" name="QuestionToAsk">Please allow the script
to ask you a question.</label>
Pour moi, l'id, c'est QuestionToAsk,

oui, et d'ailleurs :
[cite]
function opening()
{
this.QuestionToAsk
[/cite]
alors que "Please allow the script
to ask you a question", ça serait plutôt l'innerHTML

oui
et dans le DOM l'innerHTML est onsidéré comme un nœud.

OK
Au contraire :
<input type="button" value="Yes" name="yes" id="Yes"
onClick="ret=true;returnfunction()" />
Là, le texte à afficher est stocké dans l'attribut value,

toutafé
qu'il sera plus difficile de considérer comme un nœud à lui tout seul.

Peut-être bien ...
et alors ?
quel est le blème ?
Tu nous compares :
this.QuestionToAsk.innerHTML
et
document.getElementById('Yes').value
en disant :
je dois impérativement utiliser la syntaxe développée :
document.getElementById('Yes').value = strYes;
Comme pour moi il est absolument évident qu'on utilise dans un cas
'innerHTML' et dans l'autre 'value' il me semblait que le problème était
pour l'adressage de l'élément visé :
this.NomId / document.gEBI()
Pour les éléments de formulaires(*), leurs contenus est toujours leurs
valeurs.
(*) INPUT TEXTAREA SELECT
(LABEL, FIELDSET sont des balises "normales" +/- de mise en forme)
En VB on peut écrire quelque chose comme :
DIM strExemple As String
strExemple = "Un texte"
If MsgBox("Voulez-vous afficher l'exemple ?", vbYesNo) = vbYes Then
MsgBox strExemple
End If
alors qu'en Javascript pour faire la même chose il faut utiliser deux
scripts et écrire quatre fonctions pour faire les liens entre eux.

Le moyen *court* presque acceptable je l'avais donné précédemment :
<script>
function MsgBox(strQuestion,oui,non) {
alert(confirm(strQuestion+'nnOui = OK, Non = Annuler')?oui:non);
}
</script>
<button onclick="MsgBox('Ça va bien ?','Bon! Tant mieux.','J'en suis
désolé')">Hello</button>
Est-ce que c'est parce que je ne sais pas faire, ou c'est inévitable ?

jQuery doit certainement avoir ça dans son sac à malice ?!
google ==> boite modale ?
Pour ce qui est d'écrire le script de question Oui/Non dans le même
fichier, je ne me représente pas trop, avec un système d'inclusion ça
doit présenter son intérêt. Tu ferais ça comment ?
Enfin il y a alert, mais là si on a des boutons c'est avec les intitulés
standard (true / false, c'est bien ça ?)
Si je l'ai fait dans un autre fichier c'est pour pouvoir faire un
affichage -avec d'autres intitulés de boutons que ceux de alert.

Oui.
Sinon afficher une boîte de dialogue et ensuite modifier les intitulés
de ses boutons avec un autre programme, j'y ai joué il y a un moment,
mais ... pas en Javascript.

No, on peut pas.
Le JS s'interdit d’interférer avec le système et les applications de
l'ordi hôte
Il me semble que ça améliorerait la lisibilité. ça aurait du reste sur
le VB l'avantage de plus de souplesse pour les intitulés des boutons.



Tu n'es pas "obligé" d'utiliser un popup, avec le DOM il devient "assez"
facile de remplacer la fenêtre par un DIV (en position absolute)
Tu me diras qu'un switch avec juste une valeur on peut critiquer, mais
comme ça c'est plus facile d'ajouter juste avant le default :
case "de":
strYes = "Ja";
strNo = "Nein";

il suffit d'en profiter pour aussi traduire le reste ... ?
Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Gloops
Le 17/07/2016 à 13:10, SAM a écrit :
Le 17/07/16 à 01:28, Gloops a écrit :
En jQuery on fait même encore plus fort si je ne m'abuse :)

Je sais pas c'que c'est ce jQuery :-(
Peu-être as-tu remarqué ceci,
</HEAD><BODY><form></form>
<input

oui, c'est bien pourquoi je l'évoque.
Ah, ce qui a pu arriver est que comme je n'ai pas mis Form dans la
syntaxe d'appel, du coup ça ne retourne un résultat que si le contrôle
est en dehors du Form.

Je ne crois pas .... as-tu testé avec mon code (corrigé) de tes exemples
? et où le label est dans le form.
Je referai quelques essais dans la journée, pour le moment j'ai un
nettoyage qui prend des ressources ...
Le fait que dans le premier cas on a affaire à un nœud HTML et dans le
second à un attribut ?

??? ce sont des IDs pour chaque, non ?
Alors pourquoi ça t'y fonctionnerait 1 coup sur 2 ?

Hum, voyons voir ...
<label id="QuestionToAsk" name="QuestionToAsk">Please allow the script
to ask you a question.</label>
Pour moi, l'id, c'est QuestionToAsk,

oui, et d'ailleurs :
[cite]
function opening()
{
this.QuestionToAsk
[/cite]
alors que "Please allow the script
to ask you a question", ça serait plutôt l'innerHTML

oui
et dans le DOM l'innerHTML est onsidéré comme un nœud.

OK
Au contraire :
<input type="button" value="Yes" name="yes" id="Yes"
onClick="ret=true;returnfunction()" />
Là, le texte à afficher est stocké dans l'attribut value,

toutafé
qu'il sera plus difficile de considérer comme un nœud à lui tout seul.

Peut-être bien ...
et alors ?
quel est le blème ?
Tu nous compares :
this.QuestionToAsk.innerHTML
et
document.getElementById('Yes').value
en disant :
je dois impérativement utiliser la syntaxe développée :
document.getElementById('Yes').value = strYes;
Comme pour moi il est absolument évident qu'on utilise dans un cas
'innerHTML' et dans l'autre 'value' il me semblait que le problème était
pour l'adressage de l'élément visé :
this.NomId / document.gEBI()
Pour les éléments de formulaires(*), leurs contenus est toujours leurs
valeurs.
(*) INPUT TEXTAREA SELECT
(LABEL, FIELDSET sont des balises "normales" +/- de mise en forme)
En VB on peut écrire quelque chose comme :
DIM strExemple As String
strExemple = "Un texte"
If MsgBox("Voulez-vous afficher l'exemple ?", vbYesNo) = vbYes Then
MsgBox strExemple
End If
alors qu'en Javascript pour faire la même chose il faut utiliser deux
scripts et écrire quatre fonctions pour faire les liens entre eux.

Le moyen *court* presque acceptable je l'avais donné précédemment :
<script>
function MsgBox(strQuestion,oui,non) {
alert(confirm(strQuestion+'nnOui = OK, Non = Annuler')?oui:non);
}
</script>
<button onclick="MsgBox('Ça va bien ?','Bon! Tant mieux.','J'en suis
désolé')">Hello</button>
Est-ce que c'est parce que je ne sais pas faire, ou c'est inévitable ?

jQuery doit certainement avoir ça dans son sac à malice ?!
google ==> boite modale ?
Pour ce qui est d'écrire le script de question Oui/Non dans le même
fichier, je ne me représente pas trop, avec un système d'inclusion ça
doit présenter son intérêt. Tu ferais ça comment ?
Enfin il y a alert, mais là si on a des boutons c'est avec les intitulés
standard (true / false, c'est bien ça ?)
Si je l'ai fait dans un autre fichier c'est pour pouvoir faire un
affichage -avec d'autres intitulés de boutons que ceux de alert.

Oui.
Sinon afficher une boîte de dialogue et ensuite modifier les intitulés
de ses boutons avec un autre programme, j'y ai joué il y a un moment,
mais ... pas en Javascript.

No, on peut pas.
Le JS s'interdit d’interférer avec le système et les applications de
l'ordi hôte
Il me semble que ça améliorerait la lisibilité. ça aurait du reste sur
le VB l'avantage de plus de souplesse pour les intitulés des boutons.



Tu n'es pas "obligé" d'utiliser un popup, avec le DOM il devient "assez"
facile de remplacer la fenêtre par un DIV (en position absolute)
Tu me diras qu'un switch avec juste une valeur on peut critiquer, mais
comme ça c'est plus facile d'ajouter juste avant le default :
case "de":
strYes = "Ja";
strNo = "Nein";

il suffit d'en profiter pour aussi traduire le reste ... ?
Cordialement,

J'ai jeté un petit coup d'œil distrait.
Un logiciel a mis quarante huit heures à me trouver deux virus. Il m'en
a supprimé un, heureusement.
Pour l'autre il m'a renvoyé à Windows Defender Offline, qui n'a rien trouvé.
Ce matin j'étais inquiet : plus de souris, plus de réseau, affichage en
contraste réduit. Et puis j'ai trouvé. Ce n'était pas un malware qui
bloquait, c'était le pare-feu, et son interface utilisateur n'était pas
ouverte alors ça ne se voyait pas.
Là je sais que j'ai un rootkit, heureusement il me laisse bosser, parce
que ce n'est pas le truc qu'on enlève tout seul en cinq minutes.
J'espère que les aideurs ne sont pas tous en vacances.
Avatar
Gloops
Le 16/07/2016 à 15:59, SAM a écrit :
Le 15/07/16 à 14:48, Gloops a écrit :
Bonjour tout le monde,

¿Qué tal?
Voici un document HTML d'appel pour test, et une fenêtre popup, pour
poser à l'utilisateur une question à laquelle répondre par oui ou par
non, ce qu'en VB on fait par ret = MsgBox(strQuestion, vbYesNo).

<script>
function MsgBox(strQuestion,oui,non) {
alert(confirm(strQuestion+'nnOui = OK, Non = Annuler')?oui:non);
}
</script>
<button onclick="MsgBox('Ça va bien ?','Bon! Tant mieux.','J'en suis
désolé')">Hello</button>

Si il y a une seule instruction à exécuter, bien sûr, on peut la mettre
directement dans le code du bouton.
Dans d'autres cas ça peut être, si on répond oui :
- saisir un numéro de client
- valider l'identité qui apparaît
- saisir une commande
- envoyer le récapitulatif de commande par mail
si on répond non, renvoyer à la page d'accueil.
ça pour juste prendre un exemple très bref.
ça fonctionne, sous Firefox sur Windows, je soumets l'ensemble à vos
commentaires pour optimisation, correction d'erreurs de portabilité ou
de lisibilité, autres commentaires ...
Notamment je vois deux questions :
1/ Je peux changer le texte d'un élément Label QuestionToAsk par
this.QuestionToAsk.innerHTML=window.opener.question;
aussi je me serais attendu aussi à pouvoir faire de même avec un bouton,
or là non je dois impérativement utiliser la syntaxe développée :
document.getElementById('Yes').value = strYes;

Ha ?
et
document.form[0].Yes.value
ça ne fonctionne pas ?
En tous cas, chez moi :
this.Yes.value = strYes;
this.No.value = strNo;
fonctionne !

Effectivement, j'avais mis document.Yes.value ...
this représente la fenêtre, n'est-ce pas ?
Je me représentais que les contrôles appartenaient au document.
Est-ce que ça signifie que quelque chose m'a échappé quant à la
différence entre ces deux contrôles ?

Tes éléments input ne sont pas dans le FORM ?
Faute de frappe ? (typo)
Le fait que dans le premier cas on a affaire à un nœud HTML et dans le
second à un attribut ?

??? ce sont des IDs pour chaque, non ?
Alors pourquoi ça t'y fonctionnerait 1 coup sur 2 ?

Il faudra que je ressorte l'exercice que j'ai fait l'année dernière, ce
n'était pas avec XPath mais il s'agissait bien de désigner les
différentes parties d'un document XML.
Est-il exclu de faire comme dans VB une fonction qui reçoit un intitulé
de question, et qui retourne une valeur de réponse, qu'on pourrait
placer dans l'appelant entre l'instruction à exécuter avant de répondre
à la question, et celle à exécuter après, classiquement un test ?

Pas trop compris la question ... mais si la question est de tout faire
depuis l'opener ce doit être possible. Cependant ça ne peut fonctionner
que SI les 2 fenêtres sont déjà et sont encore ouvertes.
Car là, en l'état, il faut bien attendre que le popup s'ouvre avant
qu'il puisse renvoyer une réponse. (et que donc c'est mieux que ce soit
lui qui lance la fonction-de-réponse de l'opener).

ça doit être possible, tu dis, mais alors il faut gérer les événements ...
ça risque de rester quelque temps plus simple avec une fonction pour
chaque phase du traitement.
Je vois qu'après réponse la fenêtre appelante affiche son message un peu
avant que la popup se soit fermée.

Mes outils sont trop rapides pour que je puisse voir ça ...
Mais si l'bazarrh fonctionne c'est bien ce qui doit se passer.
Serait-il judicieux de mettre une
temporisation à cet endroit ? Le code continuerait-il de s'exécuter une
fois la fenêtre popup vraiment fermée ?


En fait là-dessus j'ai répondu dans les deux heures de l'ouverture du fil.
Mais tu as raison, j'ai mis un délai fixe alors que c'est pour tenir
compte d'un délai propre au système client, donc c'est forcément une
cote mal taillée, qui réduit les nuisances d'un côté mais peut en créer
de l'autre.
A part ça ma popup met pas loin d'une minute à s'afficher sur ma
machine,

Quelle machine ?
Quel OS ?
Comment sont réglées les préférences du navigateur ? (accepte ou non les
popups)
Combien d'onglets y sont déjà ouverts et que renferment-ils ?
Avec le code simplifié donné en exemple ? (corrigé ? doctype et charset)
Le navigateur a été fermé/quitté puis relancé ?
Idem pour Windows ?

Bon j'ai demandé du secours au sujet du rootkit, en espérant que les
gens ne soient pas en vacances. Une fois que ça sera fait je referai un
tour pour les virus, a priori ça se gère bien avec des outils. Ensuite,
bien que je n'aie pas une bête de course, ça devrait aller mieux.
Avatar
Gloops
Le 17/07/2016 à 01:28, Gloops a écrit :
Il est vrai qu'au moins, on évite le risque de la question qui se pose
derrière la fenêtre principale, un peu comme l'agent de police qui irait
se mettre derrière le coffre du côté droit, en se mettant à genoux, pour
parler au conducteur pour lui demander ses papiers. En chuchotant, bien
sûr.

Pour éviter ça, dans la fonction opening il faut juste mettre this.focus().
C'est tout bête mais ça fait la différence entre une application qui
fonctionne et une application qui ne fonctionne pas.
Avatar
Gloops
Le 16/07/2016 à 15:59, SAM a écrit :
Des popups qui se causent :
http://stephane.moriaux.pagesperso-orange.fr/truc/popup_oui_non/

Ses noms de fonctions sont rigolos.
A part ça ça n'a pas l'air évident de détecter la fermeture d'une fenêtre.
Dans F2, juste après opener.Fn1.Close() on demande
alarm(opener.Fn1.texto) et on a un bonjour du défunt.
Je me demande si on devrait ajouter explicitement Fn1 = null, mais ça ne
marcherait pas si on fermait la fenêtre avec son bouton système.
A moins de définir l'événement de fermeture de la fenêtre ; je ne sais
pas si ça se fait en Javascript, ça ?
Avatar
SAM
Le 19/07/16 à 13:17, Gloops a écrit :
Le 16/07/2016 à 15:59, SAM a écrit :
Des popups qui se causent :
http://stephane.moriaux.pagesperso-orange.fr/truc/popup_oui_non/

Ses noms de fonctions sont rigolos.
A part ça ça n'a pas l'air évident de détecter la fermeture d'une fenêtre.
Dans F2, juste après opener.Fn1.Close() on demande
alarm(opener.Fn1.texto) et on a un bonjour du défunt.

Non.
J'ai ça uniquement dans Chrome (sur tablette Android) et seulement quand
je ferme l'onglet popup "manuellement" et parce que Chrome lambine à
indiquer qu'on a fermé un onglet (Attention ! tu sucres peut-être les
fraises et t'as p't'êt' fermé un onglet sans le vouloir ?)
Je me demande si on devrait ajouter explicitement Fn1 = null, mais ça ne
marcherait pas si on fermait la fenêtre avec son bouton système.

google donc "onunload"
A moins de définir l'événement de fermeture de la fenêtre ; je ne sais
pas si ça se fait en Javascript, ça ?

voir ci-dessus
Mébon ... ça ne va pas réparer ta bécane ni dé-paternaliser Chrome ...
Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Gloops
Le 22/07/2016 à 23:56, SAM a écrit :
Le 19/07/16 à 13:17, Gloops a écrit :
Le 16/07/2016 à 15:59, SAM a écrit :
Des popups qui se causent :
http://stephane.moriaux.pagesperso-orange.fr/truc/popup_oui_non/

Ses noms de fonctions sont rigolos.
A part ça ça n'a pas l'air évident de détecter la fermeture d'une
fenêtre.
Dans F2, juste après opener.Fn1.Close() on demande
alarm(opener.Fn1.texto) et on a un bonjour du défunt.

Non.
J'ai ça uniquement dans Chrome (sur tablette Android) et seulement quand
je ferme l'onglet popup "manuellement" et parce que Chrome lambine à
indiquer qu'on a fermé un onglet (Attention ! tu sucres peut-être les
fraises et t'as p't'êt' fermé un onglet sans le vouloir ?)

Ah ben moi c'est sur Firefox. J'essaierai aussi avec IE.
C'était des vraies pop-up, pas dans des onglets.
Je me demande si on devrait ajouter explicitement Fn1 = null, mais ça ne
marcherait pas si on fermait la fenêtre avec son bouton système.

google donc "onunload"

Ah ben oui c'est pourtant vrai.
Il va falloir que je fasse un peu mumuse avec ça.
A moins de définir l'événement de fermeture de la fenêtre ; je ne sais
pas si ça se fait en Javascript, ça ?

voir ci-dessus
Mébon ... ça ne va pas réparer ta bécane ni dé-paternaliser Chrome ...

Surtout en Juillet.
Il y a des gens pointus sur le nettoyage, mais quand ils sont allongés
sur la plage, forcément, ils sont moins réactifs.
Cordialement,

Pareil.
1 2