Newsgroup: it.comp.lang.javascript
Titolo: window.opener.document.Create.comment

Torno a chiedere aiuto sulle funzioni di JS.
Ho creato diversi template che vengono chiamati cliccando su alcuni
bottoni che si trovano su due diverse pagine: enter_bug.cgi e
show_bug.cgi, in entrambe le pagine ho gli stessi bottoni (ovvero da
entrambe le pagine posso chiamare gli stessi template). Dopo aver
cliccato si apre un popup contenete un form, l'utente lo riempie e con
il submit il testo dei form viene convertito in XML e inserito in un
campo di testo che si trova nella pagina "chiamante".
Solo che qui c'e' un primo problema, se apro il template da
enter_bug.cgi nello script JS devo usare la funzione
window.opener.document.Create.comment per inviare il testo del form
alla pagina cgi, mentre se lo apro con show_bug.cgi devo usare
window.opener.document.changeform.comment.
Una prima soluzione e' stata di duplicare i file CGI dei template, ma
ora tra la pagina contenete il bottone e il CGI con lo script ci sono
altre pagine in mezzo e non saprei che soluzione usare.
Faccio uno schema per spiegarmi meglio:
<vecchia soluzione>
enter_bug -> template1.cgi (Create)
show_bug -> template1bis.cgi (changeform)
<nuova situazione>
enter_bug -> CGI1 -> CGI2 -> ... -> template1.cgi
Come potrei risolvere il problema?
Grazie
SteO153

 window.opener.document.changeform.comment.
In generale puoi ottenere la textbox con un qualcosa del tipo
 var MiaForm=opener.document.Create || opener.document.changeform;
 alert(MiaForm.elements['comment'].value);
Poi dipende esattamente come e dove usi questo oggetto.
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 Poi dipende esattamente come e dove usi questo oggetto.
Lo script e' questo (how_to il nome della form)
$cgi->script('function transfert(){
	valP=document.how_to.package.value;
	valQ=document.how_to.question.value;
	valA=document.how_to.answer.value;
	//add the template to the existing bug
		val=window.opener.document.changeform.comment.value;
		val=val+"<template>\n<title>HowToTemplate</title>[...]</template>
\n";
		window.opener.document.changeform.comment.value=val;
		close();
	}' );
Mi consigli di modificarlo in questo modo?
$cgi->script('function transfert(){
	[...]
		val=window.opener.document.Create.comment.value ||
window.opener.document.changeform.comment.value;
		val=val+"<template>\n<title>HowToTemplate</title>[...]</template>
\n";
		alert(how_to.elements['comment'].value);
		close();
	}' );
Ora comunque provo questa modifica.
Grazie
SteO153

 window.opener.document.changeform.comment.value;
no, non ho scritto così, così ti segnalerà errore sempre sulla
Create.comment.value (nel caso si debba usare l'altra).
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 Create.comment.value (nel caso si debba usare l'altra).
Lo script come dovrebbe essere modificato?
Ho provato anche in altri modi, ma non ci sono riuscito.
(Lo script l'ho ereditato da chi ha lavorato sul progetto prima di me)
Grazie
SteO153

 Lo script come dovrebbe essere modificato?
con quello che ti ho scritto:
 prima ottieni un riferimento alla form corretta:
  var MiaForm=opener.document.Create || opener.document.changeform;
 Poi, partendo dal riferimento alla form, ti riferisci ai campi e ai loro
valori: es.
 alert(MiaForm.elements['comment'].value);
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

  alert(MiaForm.elements['comment'].value);
Ora ho modificato lo script cosi' (solo di prova)
<script>function transfert(){
	var unpack=opener.document.Create || opener.document.changeform;
	valUP=document.unpack.package.value;
	valUPV=document.unpack.pkg_version.value;
	valUA=document.unpack.application.value;
	valUAV=document.unpack.app_version.value;
	valOS=document.unpack.os.value;
	// Add the templates to the create a bug page
   	//	unpack=window.opener.document.Create.comment.value;
	//	window.opener.document.Create.comment.value=unpack;
		alert(unpack.elements['package'].value);
   		close();
	}</script>
E ho questo errore:
Error: unpack.elements['package'] has no properties
Source File:
http://scisoft8:8890/pixillaTemp/delete.cgi?package=adp&pkg_version=1.0&application=monophosphate&app_version=0.9&os=MacOS%20X
Line: 80
Non dovrebbe apparirmi un popup con il valore di package?
SteO153

 	valUP=document.unpack.package.value;
non ti ho scritto cosě ... se hai il riferimento alla form parti da quella:
 var valUP=unpack.package.value;
-- 
"e mai che mi sia venuto in mente
 di essere piů ubriaco di voi
 di essere molto piů ubriaco di voi"
									  F.D.A.

  var valUP=unpack.package.value;
Ho aggiunto "var" e non e' cambiato niente.
document mi avevi detto tu di aggiungerlo qualche giorno fa perche'
avevo problemi di compatibilita' con FF
SteO153
/ma tu come lo riscriveresti quel codice "CGI/JS"?

 avevo problemi di compatibilita' con FF
devi cercare di capire quello che fai ...
document è il "top" del documento, che abbiamo già "usato" per recuperare
un riferimento alla form.
Non conviene se ti fermi un attimo e ti studi le basi?
-- 
"e mai che mi sia venuto in mente


 Non conviene se ti fermi un attimo e ti studi le basi?
Il fatto e' che lo scopo del progetto e' un altro e di JS c'e' solo
quello script (come ti ho detto neanche scritto da me) ripetuto in
vari file, ma e' sempre lo stesso adattato con le diverse variabili
dei form. Poi il resto codice e' in CGI/Perl, e l'obiettivo non e'
solo la scrittura del codice, ma anche la progettazione del sw.
Insomma, studiarmi JS solo per uno script... CGI/Perl non lo conoscevo
e me lo sono studiato (OpenUP, UML, XML, MySQL, DB e compagnia bella
li conoscevo).
SteO153