11548 sujets

JavaScript, DOM et API Web HTML5

bonjour,
je connais showmodaldialog et ce n'est pas ca que je veux faire ! (je préfère le preciser).

En fait je voudrais "surcharger" la methode prompt.

Ca c'est pas dur, il suffit de faire :
window.prompt = function(titre,message){
bla bla bla ...
}


la ou ca se complique, c'est que dans mon bla bla bla, j'affiche un div avec d'autres div pour faire une fenetre avec barre de titre, bouton de fermeture et qu'on peut deplacer.

A l'intérieur, j'ai un input text et un bouton.

Je voudrais faire en sorte que quand on appel prompt, ca affiche la fenetre et que tant qu'on a pas cliqué sur le bouton, le reste de la page se mette en attente du retour de la methode prompt.

J'ai essayé de mettre une boucle infinie qui testerais continuellement une condition de sortie.
Condition de sortie qui serais changée par le click du bouton bien sur.
Mais bon js et les threads c'est pas trop ca Smiley decu

Donc mon principal probleme en fait c'est de pouvoir "rebalancer" mon retour.

Je m'explique, mon code ressemble un peu a ca :
window.prompt = function(titre,message){ 
PromptFrame = new TheoFrame();
with(PromptFrame){
setTitle(titre);
setMovable(true);
setClosable(false);
}
inp = document.createElement("input")
inp.id = "PromptFrameInput";
ok = document.createElement("button");
ok.value = "ok";
ok.onclick = function(){
   var returnval = document.getElementById("PromptFrameInput").value;
   // c'est ici que ca se corse
   // il faudrais que la methode prompt retourne returnval dans mon 
   //script et que je le recupère dans une variable !!
}

PromptFrame.appendChild(document.createTextNode(message));
PromptFrame.appendChild(inp);
PromptFrame.appendChild(ok);
PromptFrame.display();
}


et donc l appel :
var reponse = prompt("Mon titre","ma question");


donc en gros que mon onclick fasse le retour de l'appel a prompt.
autrement dis, que je mette tout en attente du click.

Je sais pas si je suis tres clair

Quelqu'un verrais t'il une solution ?
Bonjour,
Pourquoi faire simple quand on peut faire compliqué ?

Question qui paraîtra anodine au premier abord : pourquoi ne pas utiliser la fonction prompt normale ?
Et bien alors,
première raison completement superflue, elle ne me plais pas graphiquement.

autres (vraies) raisons :
ca va me permettre de faire des dérivées de mon objet pour avoir des prompt pour du texte ou avec un select par exemple.

Je voudrais arriver a créer une sorte de super boite de dialogue.

Je le fais deja avec XHR en recupérant mes templates php pour m afficher des formulaires en "popup interne" (je savais pas comment dire), mais dans ces cas la, la reponse repart aussitot vers le serveur.

La je veux un prompt client que je pourrais ensuite dériver.

Je sais que ca peut paraitre etrange mais bon. Smiley biggrin
Si c'est un popup, tu as moyen de bloquer les actions sur la fenêtre mère, mais pas le script.
La seule technique est de séparer le code en deux fonctions, et de n'appeler la deuxième qu'à la validation de la saisie. ET n'utilise pas onclick sur le bouton submit.
je pense qu'on s'est pas compris, si j'ai dis popup c'etais pour designer ma fenetre mais ce n'en est pas une puisque je te rappelle que c'est des div.

D'autre part, c'est pas un submit mais un button
ok = document.createElement("button");


Je vais essayer de les simuler en magouillant avec setIntervall.
button ou input, ça change rien. Ca fait quoi si je fais enter dans la zone de texte pour valider ?

OK donc tu utilises les "popup accessibles" expliquées en tutoriel sur ce site.
bon, je doit mal m'exprimer,
ce que je fais ressemble un peu a tes popups accessible.

La grosse difference, c'est que quand j affiche ma popup, je voudrais que ca interrompe les traitements tant que l'utilisateur n'a pas cliqué sur le bouton car je voudrais renvoyer la valeur du input texte dans une variable js.

c'est a dire garder le mode de fonctionnement de prompt :
var machin = prompt("titre","message");
Si tu veux vraiment faire un prompt perso, il faut que tu appelles une deuxième fonction à la validation, et utiliser une variable globale pour enregistrer la saisie.
IL n'est pas possible de faire patienter le script javascript comme tu aimerais le faire. Ou alors il te faut un while (!validation) {} et ça va bousillier inutilement des ressources système.
ok bon je vais continuer a farfouiller alors, doit bien y avoir un moyen de faire ca proprement !

Merci a toi