Newsgroup: it.comp.lang.javascript
Titolo: come si apre un popup?

Salve...
Premessa: sono totalmente ignorante in materia!
Domanda: come si fa a far aprire da una pagina di un sito un popup??
Avrei bisogno che cliccando su un link mi si aprisse questo popup... ma non
so nemmeno da dove si comincia!
Mi hanno detto che serve un javascript... per cui eccomi qui!
Sareste così gentili da spiegarlo a una totale novellina? :-)
Grazie a tutti!
PS: ho provato a leggere i messaggi precedenti.. ma sono tutti scambi di
nozioni tra gente che evidentemente ne sa più di me!

 nozioni tra gente che evidentemente ne sa piů di me!
Beh, se il discorso ti interessa continua pure a frequentarci, e vedrai 
che il tuo status di novellina passera' presto!
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

Il tuo nik sarą Zero... ma sei davvero un grande! :-)
Grazie

 Grazie
Di niente, figurati


Argh! mi sa che sono stata troppo ottimista.. ho difficoltà ad impostare i
parametri! SOB!
Ho fatto tutto ma mi si apre alla fine solo una pagina not found!!
Ma sarò scema o è il caldo? :-)
( è una domanda retorica... per favore non rispondete:-)

 ( è una domanda retorica... per favore non rispondete:-)
Sinceramente ti avrei risposto la seconda.. e' innegabile che fa un 
caldo disumano (soprattutto l'umidita' e' impressionante), mentre 
ignoro il tuo QI, e quindi non mi sarei sbilanciato. ;D


ehm... come mai una popup non si apre più alle dimensioni prestabilite?
<form action="Elabora.php" method=post
       name="DMForm" target="PopWindow"
       onSubmit="return controllaCampi(this);
		window.open('/Standard/ElaboraDMform.php','PopWindow', 
'toolbar=no,alwaysRaised=yes,scrollbars=no,
resizable=no,dependent=yes,
z-lock=yes,status=no,width=300,height=300')">
Prima di aggiungere l'invocazione della funzione controllaCampi 
funzionava e apriva la pop alle dimensioni prestabilite... ora se ne 
frega delle opzioni direi...
Sapete darmi una zampina?
-- 
Strahd
per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]

 ehm... come mai una popup non si apre più alle dimensioni prestabilite?
Semplicemente perche' il codice non viene piu' eseguito :)
Nell'event-handler onsubmit hai messo "return controllaCampi(this)",
questo significa che una volta eseguita la funzione "controllaCampi", 
viene fornito un valore di ritorno all'event-handler, il quale - quindi 
- ritiene a ragione di aver terminato il suo compito, e se ne strabatte 
del codice successivo.
Questo vale per qualsiasi funzione. Il codice posto dopo un return non 
viene mai eseguito, in quanto si e' gia' usciti dalla funzione stessa.
Il consiglio? Poni l'apertura della finestra nella controllaCampi(), 
solo nel caso che essa dia un valore di ritorno positivo (ovvero vada 
tutto bene).
O, se vuoi generalizzare la cosa, crea una funzione che inglobi il 
controllo dei campi e l'apertura della finestra, e metti quella 
nell'evento onSubmit.
Es.
function validateForm(objectForm){
	if (controllaCampi(objectForm)){
		window.open(...);
		return true;
	}
	return false;
}
Nota: Come vedi manca un "else". Per il discorso di cui prima, infatti, 
se si raggiunge il "return true" all'interno dell'if, non si arrivera' 
mai al punto del return false.
Ergo, se normalmente il codice al di fuori di un blocco if, viene 
eseguito sia che la condizione risulti falsa, sia che risulti vera, nel 
nostro caso verra' eseguita solo se risulta falsa, in quanto se vera 
usciamo dalla funzione stessa.
P.S.
Mio dio, oggi mi spiego da cani =_=


 Nota: [..]
si ok questo è ovvio
Il porblema è che la funzone controllaCampi potrebbe non esserci... 
ora... se c'è volgio eseguire la pop-windows (che è il target 
dell'action della form) se e solo se mi ritorna vero, se non c'è voglio 
eseguire cmq la popup
Non posso assolutamente suppore di avere una funeione nel codice (a meno 
che non mi diciate che è possibile inserire script nel mezzo del body o 
di una tabella...!!!)
Insomma se esistesse una funzione che mi riporta dice se una funzione 
esiste o meno sarebbe facile...


 esiste o meno sarebbe facile...
Per esserci c'e'. Ma la domanda e': In che caso la controllaCampi() non 
esiste? Nel caso in cui essa non viene fatta scrivere a PHP, o perche' 
stai facendo un include in una pagina che non ce l'ha, o cos'altro?
Perche' puoi semplicemente risolvere la cosa server side, in modo molto 
piu' elegante.


 tutto qua (sempre meglio mettere le mani avanti :) ).
[non vorrei essere sembrato sgarbato non era mia intenzione ^_^]
allora... la cosa funzia cosě
la form in questione viene creata automaticamente da uno script php, a 
partire da determinati dati.
Lo script č molto generico e viene utilizzato da molti applicativi, 
scritti anche da programmatori diversi
In molti casi č preferibile, effettuare controlli prima di fare il post 
della form, cosě nello standard che abbiamo definito la funzione che fa 
questo si deve chiamare controllaCampi.
La funzione ovviamente cambia da applicativo ad applicativo e puň 
esserci o meno a seconda delle decisioni del programmatore.
il programmatore scrive:
- un'intestazione (che contiene anche gli script che desidera)
- una coda
- un oggetto di nostra creazione che permette l'interazione con un Db 
passando dalla pagina php che crea la form.
da qui il problema:
	il programmatore potrebbe decidere di non inserire la funzione, nell 
onSubmit a me servirebbe fare una cosa del genere:
if (not exist (controllaCampi(this)) or (controllaCampi(this)==true) 
then window.open eccc....
Come č possibile farlo? in pratica devo fare un'implica:
	Esiste(funzione)->funzione()
per de morgan a->b = not a or b


 per de morgan a->b = not a or b
...comunque questo e' facile.
Due strade:
- if(typeof(nomeTuaFunzione)!="undefined")
- altrimenti considera che in fondo le funzioni non sono altro che delle 
variabili. Detta male male, ma credo esemplifichi cio' che ci interessa.
Se e' vero che if(variabile) restituisce un'eccezione nel caso la 
variabile non sia stata dichiarata, questo non e' vero nel caso delle 
proprieta' degli oggetti. Quindi se oltre alla variabile specifichiamo 
il suo ambito di appartenenza non generiamo eccezioni.
Tutte le variabili che dichiariamo appartengono in prima istanza 
all'oggetto window, quindi:
if(window.nomeTuaFunzione)
In javascript, sembrerebbe ovvio ma e' meglio notarlo, lo stesso vale in 
  caso di funcioni o oggetti annidati:
if(funzionePadre.funzioneFiglia)
In jscript (quindi ie) questo non risulta vero, non viene generata 
alcuna eccezione ma non si riesce ad accedere alla funzione figlia.

 per de morgan a->b = not a or b
if (typeof nomeFunction!="undefined")
	nomeFunction();
o
if (window.nomeFunction){
	nomeFunction();
}
in-line potresti scrivere:
if (!window.nomeFunction || nomeFunction(this) ){
	/* do something */
}
Pero' proprio per una maggiore modularita' io utilizzerei la forma di 
cui prima.. magari ti puoi fare, come ho fatto io in delle vecchie API, 
un prototipo di function vuota da assegnare laddove richiami una 
funzione, ma non necessariamente deve fare qualcosa. Un po' come gli 
event handler.


 alcuna eccezione ma non si riesce ad accedere alla funzione figlia.
E per una volta sarei quasi parzialmente d'accordo con IE.. almeno da 
un punto di vista prettamente logico.
Ovviamente stiamo parlando di Javascript/Jscript, quindi, partendo dal 
presupposto che tutto e' variabile, definire: 
function a(){
	function b(){
		alert("do something");
	}
}
Non sarebbe altro che definire una variabile "locale". Quindi non e' IE 
a fare discriminazioni a questo giro, in quanto lui si comporta secondo 
le regole di "scope" del linguaggio.


 le regole di "scope" del linguaggio.
Piu' che vero e piu' che d'accordo. Stavolta e' piu' rigoroso lui, pero' 
questa liberta' che ti offre javascript e' proprio carina. Da una parte 
ho comunque uno scope abbastanza rigido e dall'altra, volendo, simulo i 
namespace rendendo piu' "molle" l'incapsulamento.
Ok, stiamo quasi parlando di sesso degli angeli, pero'...

 namespace rendendo piu' "molle" l'incapsulamento.
I namespace li simulo da quel di'.. ma non e' certo quella la sintassi 
giusta per farlo.
Inizialmente quando m'era preso la mania, mi ero messo a 
"namespaciare" tutto cio' che mi capitava sottomano in JS.. 
Il punto e' che una volta partito, non mi fermava nessuno. Creavo il 
primo namespace globale. Poi sottocategorizzavo gli altri. E ad ognuno 
di essi aggiungevo altre categorie, e cosi' via.. A livello logico, il 
processo forse era anche corretto.
Ma e' venuto fuori un codice che neanche un marziano riuscirebbe a 
districarsi.. alla fine troppe cose "nested" alla fine non fanno altro 
che confondere il tutto.. Anche se un "vero programmatore", come si 
sa', puo' far un ciclo DO di 5 pagine senza fare confusione 8)
Optai per delle vie di mezzo.. Altrimenti finisce che con i namespace 
t'ingabbi, piu' che far del codice modulare.
E si passa da un:
var mymenu=new dhtmlMenu("label",popUpMenu);
a un:
var mymenu=new System.Components.Widgets.Menu
("label",System.Components.Widgets.Menu.PopUp)
E non ti passa veramente piu', manco con i with.. :) (e non e' bello 
riempire il codice di "with")


 giusta per farlo.
Faresti così: Oggettino con una proprietà che chiama una function che a sua
volta è un oggetto e che etc etc? :-/
Curioso, curioso...come li faresti?

 giusta per farlo.
Scusa il megataglio e il ritardo, ma mi ero perso il pezzo.
Intendi, giustamente dato il linguaggio, che e' buona norma affidarsi 
solo all'ereditarieta' dei prototipi?
Secondo me e' una simpatica liberta' quella di javascript; ovviamente 
ben diversa dalle "simpatiche liberta'" che ci offre il concorrente, 
ovviamente si potrebbe strutturare il programma in altra maniera. Rimane 
simpatica.

 simpatica.
Si, ma non e' quello il modo giusto per farlo :)
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
