Newsgroup: it.comp.lang.javascript
Titolo: funzioni prompt e confirm - qualche alternativa?

Sono alle solite...
eh... si alle prese con JavaScript (che mi intriga molto).
Allora, problema del momento:
in alcuni punti del codice ho la necessità di chiedere in input
all'utente o una conferma (con CONFIRM) o l'introduzione di veri e
propri valori (con PROMPT).
Nessun problema, se non fosse per il fatto che stò progettando una mia
interfaccia grafica (stile linux) e quando Javascript esegue confirm o
prompt inevitabilmente si presenta la classica window di Internet
Explorer... che non è il massimo in quanto ad integrazione nella mia
grafica e soprattutto non ha moltissime personalizzazioni...
le funzioni che utilizzo sono tutte del tipo:
function salvaprofilo() {
   var nomeprofilo=prompt("Immettere nome da assegnare al profilo
","");
   if (nomeprofilo!=null) {
              [........... fai qui quello che devi fare ........]
   }
}
ora: al posto di prompt e confirm vorrei utilizzare una funzione che
mi visualizzasse una mia IFRAME che contiene la pagina che accetterà
l'input o la conferma. E questo lo faccio già per altri utilizzi...
quindi non sarebbe un problema.
La domanda è: mentre confirm e prompt sono modali (bloccano
l'esecuzione finchè non ricevono una risposta dall'utente), IFRAME non
lo è e soprattutto non tornerebbe il valore alla mia variabile
"nomeprofilo" come farebbe prompt (nell'esempio di cui sopra).
Come faccio a realizzare questa cosa?
Idee? Consigli?
grazie a tutti...
ciao!

 Come faccio a realizzare questa cosa?
dovresti rendere la chiamata asincrona e riprogettare le interazioni:
ad esempio:
function a()
{
  if (confirm('procedere?'))
  {
    b();
  }
  else
  {
    c();
  }
}
diventa:
/* Nella pagina chiamante */
function a()
{
   showMyConfirm();
}
/* Nella popup */
<input type="button" onClick="opener.a()" value="Si" />
<input type="button" onClick="opener.b()" value="No" />
per rendere simil-modale una finestra ci sono molti hack e se ne e'
parlato varie vole, puoi cercare nei vecchi articoli del NG
-- 
"So, I never went back to work for Lieutenant Dan.
Though he did take care of my Bubba-Gump money.
He got me invested in some kind of fruit company"

 Come faccio a realizzare questa cosa?
dovresti rendere la chiamata asincrona e riprogettare le interazioni:
ad esempio:
function a()
{
  if (confirm('procedere?'))
  {
    b();
  }
  else
  {
    c();
  }
}
diventa:
/* Nella pagina chiamante */
function a()
{
   showMyConfirm();
}
/* Nella popup */
<input type="button" onClick="opener.b()" value="Si" />
<input type="button" onClick="opener.c()" value="No" />




forse non sono stato sufficientemente chiaro... mi ripeto:
----------------------------
[...] omissis
Allora, problema del momento:
in alcuni punti del codice ho la necessità di chiedere in input
all'utente o una conferma (con CONFIRM) o l'introduzione di veri e
propri valori (con PROMPT).
Nessun problema, se non fosse per il fatto che stò progettando una mia
interfaccia grafica (stile linux) e quando Javascript esegue confirm o
prompt inevitabilmente si presenta la classica window di Internet
Explorer... che non è il massimo in quanto ad integrazione nella mia
grafica e soprattutto non ha moltissime personalizzazioni...
[...] omissis
ora: al posto di prompt e confirm vorrei utilizzare una funzione che
mi visualizzasse una mia IFRAME che contiene la pagina che accetterà
l'input o la conferma. E questo lo faccio già per altri utilizzi...
quindi non sarebbe un problema.
La domanda è: mentre confirm e prompt sono modali (bloccano
l'esecuzione finchè non ricevono una risposta dall'utente), IFRAME non
lo è e soprattutto non tornerebbe il valore alla mia variabile
"nomeprofilo" come farebbe prompt (nell'esempio di cui sopra).
Come faccio a realizzare questa cosa?
-------------------------------
mi risulta che in un IFRAME per accedere all'oggetto gerarchicamente
superiore io debba utilizzare PARENT (o TOP) e non OPENER...
la tua soluzione l'ho valutata prima di postare il mio dilemma, ma
purtroppo non è percorribile dato che dovrei strutturare una pagina
per ogni "prompt virtuale".
Ho guardato nel NG per rendere modale una finestra pop-up, onestamente
la cosa non è fattibile per il punto 1 della mia richiesta
(integrazione grafica) e il concetto di modale cambia da browser a
browser...
comunque grazie.
ciao.
p.s.: altri suggerimenti?

p.s.: altri suggerimenti?
Qualcosa di simile:
<html>
<head>
<style type="text/css">
#maindiv{
 border:1px solid #ff0000;
 width:300px;
}
#prompt{
 display:none;
 border:3px outset #0000ff;
 color: #0000ff;
 background-color:#a0a0ff;
 width:200px;
}
#ptitle{
 border:1px solid #0000ff;
 color: #e0e0ff;
 background-color:#0a0a2f;
}
</style>
<script type="text/javascript">
var a=0; 
var b=0;
var curvar=0;
function promptval(v, msg, nome){
 var val=0;
 document.getElementById("maindiv").style.display="none";
 document.getElementById("prompt").style.display="block";
 document.getElementById("ptitle").innerHTML=msg;
 document.getElementById("name").innerHTML=nome;
 curvar=v;
 if(v==1){
	val=a;
 } else if(v==2){
	val=b;
 } //else ....
 document.getElementById("pval").value=val;
}
function showmain(){
 document.getElementById("maindiv").style.display="block";
 document.getElementById("prompt").style.display="none";
}
function okprompt(){
 var val=document.getElementById("pval").value;
 if(curvar==1){
	a=val;
	document.getElementById("showa").innerHTML="a="+a;
 } else if(curvar==2){
	b=val;
	document.getElementById("showb").innerHTML="b="+b;
 } //else ....
 showmain();
}
</script>
</head>
<body>
<div id="maindiv">
 <div id="showa">a=0</div>
 <div id="showb">b=0</div>
 <a href="#" onclick="promptval(1, 'Inserisci a', 'a: ');return
false;">Prompt a</a>
 <a href="#" onclick="promptval(2, 'Inserisci b', 'b: ');return
false;">Prompt b</a>
</div>
<div id="prompt">
  <div id="ptitle">titolo</div><br/>
  <form name="prompt" onsubmit="return false;">
   <span id="name">nome: </span><input id="pval" name="val"
type="text" size="10" value="0"/>
  </form>
  <a href="#" onclick="okprompt();return false;">OK</a> 
  <a href="#" onclick="showmain();return false;">Cancel</a> 
 </div>
</div>
</body>
</html>
In pratica, quando vuoi l'input dell'utente, nascondi tutto e fai
apparire la div che richiede l'input. Ricevuto l'input fai sparire la
div che lo richiede e fai riapparire tutto il resto.
'bye

'bye
Perfettissima idea... č quello che ho realizzato utilizzando DIV
multipli (uno nell'altro) e IFRAME che contengono poi la grafica e
l'interfaccia utente, faccio apparire gli oggetti prompt quando
servono e li faccio scomparire quando non mi servono piů.
Ciao e grazie.