Mar Ene 29, 2008 5:43 pm
|
 |
aneita
Perlero Nuevo

|
Registrado: 29 Ene 2008
Mensajes: 4
|
|
| Mandar llamar función JavaScript en una variable de Perl |
|
|
Hola tengo este problema, necesito saber el valor del combo que selecciono y pasárselo a una variable en Perl.
Para eso tengo mi select.
| HTML: | <form id="form1" name="form1" method="post" action="'.$param.'">
<input type="hidden" name="ind">
<input type="hidden" name="mes3">
<input type="hidden" name="opc" value="dsp">
<label>
<select name="ComboMes">
<option value="0">Mes </option>
<option value="1">Enero </option>
<option value="2" selected="selected">Febrero </option>
<option value="3">Marzo </option>
<option value="4">Abril </option>
<option value="5">Mayo </option>
<option value="6">Junio </option>
<option value="7">Julio </option>
<option value="8">Agosto </option>
<option value="9">Septiembre </option>
<option value="10">Octubre </option>
<option value="11">Noviembre </option>
<option value="12">Diciembre </option>
</select>
</label>
</form>
|
Y mi función que me devuelve el valor seleccionado.
| Javascript: | function valor_Combo()
{
valor = form1.ComboMes.options[form1.ComboMes.selectedIndex].value;
return valor;
} |
Necesito pasarla a la variable
| Perl: | $mes2 = JavaScript::valor_Combo();
|
pero no me regresa nada...
¿Cómo puedo hacer eso? Alguien ayuda. ¡¡Muchas gracias!! |
|
|
|

Mar Ene 29, 2008 6:20 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3841
Ubicación: Valladolid, España
|
|
|
|
|
Bienvenida a los foros de Perl en Español, aneita.
Un momento, que me he perdido...
¿Dónde se está presentado el HTML? ¿En el navegador del cliente?
¿Dónde se está ejecutando el javascript? ¿También en el navegador del cliente? ¿O en el servidor con ayuda del módulo JavaScript?
¿Dónde se está ejecutando el perl? ¿En el servidor o en el cliente?
Me falta la secuencia de acciones de todo esto...
Ultima edición por explorer el Mar Ene 29, 2008 7:19 pm, editado 1 vez |
|

Mar Ene 29, 2008 6:32 pm
|
 |
aneita
Perlero Nuevo

|
Registrado: 29 Ene 2008
Mensajes: 4
|
|
|
|
|
Bueno ese es mi gran problema: no entiendo mucho de esto.
Este es mi código:
| Perl: | #! c:\perl\bin\perl.exe
require "cgi-lib.pl";
print "Content-type: text/html\n\n";
#-----------------------------------------------------------------------
if (&ReadParse ){
local (*in ) = @_ if @_ == 1;
local (%in) = @_ if @_ > 1;
local ($key);
}
#-------------------------------------------------------------------
if ( length($in{"uid"}) == 0 ) {print "Invalid access"; exit; };
if ( length($in{"sessid"}) == 0 ) {print "Invalid access"; exit; };
$user = &codeusr ( "DECO", $in{"uid"}, $in{"sessid"} );
$param = "?param=0&uid=". $in{"uid"}. "&sessid=". $in{"sessid"};
$cont_ind = 0;
local($linea_fil)= "...";
$fil = "tabla.txt";
if(! open(texto, "<$fil")){print "...no existe $fil "; exit; };
while(<texto>)
{
$linea_fil = $_;
@linea = split(/\|/, $linea_fil);
for ($j= 0; $j<= 12; $j++ ){ $tabla[$cont_ind][$j]= $linea[$j]; }
$cont_ind++;
}
close (texto );
$cont_ind--;
#for ($i=0; $i<=$cont_ind; $i++){ for ($j=0; $j<=12; $j++){print " $i , $j ".$tabla[$i][$j]." <br>";}}
#-------------------------------------------------------------------
print '
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>PINet</title>
<link href="estilos.css" rel="stylesheet" type="text/css" />
<script type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>
<body>
';
#-------------------------------------------------------------------
if ($in{"opc"} eq "dsp" ){&dsp_forma; } else {&dsp_lista; };
#-------------------------------------------------------------------
exit;
sub dsp_forma
{
$indicador= $in{"ind"};
$mes2=JavaScript& #058;:valor_Combo();
print '<iframe name="opcion2" src ="'. $tabla[$indicador][$mes2]. '" width="100%" height="1000px" FRAMEBORDER=0 align=middle > </iframe> ';
}
sub dsp_lista {
#-----------------------------------------------------------------------
print '
<table width="105" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="101" bgcolor="#60BCEB"></td>
</tr>
</table>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="1007" height="140">
<param name="movie" value="banner.swf" />
<param name="quality" value="high" />
<embed src="banner.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="1007" height="140"></embed>
</object>
<script>
function abreIndicador(ind)
{
url = "'. $param. '&opc=dsp&ind=" + ind + "&mes=" + valor_Combo();
url="dsp.pl" +url;
alert(url);
frames[\'opcion\'].location.href=url;
frames[\'opcion\'].location.replace(url);
//form1.ind.value=ind;
//form1.submit();
}
function valor_Combo()
{
valor = form1.ComboMes.options[form1.ComboMes.selectedIndex].value;
return valor;
}
</script>
<table width="1007" height="630" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="104">
<form id="form1" name="form1" method="post" action="'. $param. '">
<input type="hidden" name="ind">
<input type="hidden" name="mes3">
<input type="hidden" name="opc" value="dsp">
<label>
<select name="ComboMes">
<option value="0">Mes</option>
<option value="1">Enero</option>
<option value="2" selected="selected">Febrero</option>
<option value="3">Marzo</option>
<option value="4">Abril</option>
<option value="5">Mayo </option>
<option value="6">Junio</option>
<option value="7">Julio</option>
<option value="8">Agosto</option>
<option value="9">Septiembre</option>
<option value="10">Octubre</option>
<option value="11">Noviembre</option>
<option value="12">Diciembre</option>
</select>
</label>
</form></td>
<td colspan="2">
<a href="'. $param. '&opc=dsp&ind=4&mes=0" target="opcion" ><img name="menu_r1_c4" src="images/menu_r1_c4.png" width="102" height="24" border="0" id="menu_r1_c4" alt="1" /></a></td>
</tr>
<tr>
<td width="104" height="39" bgcolor="#77AB00"> </td>
<td colspan="1" valign="bottom" bgcolor="#77AB00"><span class="style3">PRODUCTIVIDAD </span> </td>
</tr>
<tr>
<td bgcolor="#77AB00"> </td>
<td width="682" valign="top" align="center" bgcolor="#77AB00"><div id="main" align="center">
<iframe name="opcion" src ="index2.html" width="100%" height="392px" FRAMEBORDER=0 align=middle > </iframe>
</div></td>
<td colspan="1" height="52" align="center" background="images/fondo.gif" valign="top"><img src="images/tit.png" width="173" height="52" align="top"/>
<table width="179" border="0">
<tr>
<td height="52" align="left" valign="top">dsasd sadasd asdasdas asdasda asdasasd asdasdas asdasdas asdasdas asdasdas adad sdas asdasdas sdasda sadasd asdasd asdasd asdasda asdasd aasdasd adasd asdasd adas asdasd asdasd asdasd asdasdasda gggggggggggggggggggggg asdasd asdasd czxc zczxcczx zxczx zczxzxcc </td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2" bgcolor="#77AB00"><div align="right"><img src="images/semicirculo.png" width="46" height="46" /></div></td>
<td width="221" rowspan="3"> </td>
</tr>
<tr>
<td height="26" colspan="2" valign="bottom" bgcolor="#99CC00"><span class="style3 style10">Comentario del Director </span> </td>
</tr>
<tr>
<td height="79" bgcolor="#60BCEB"> </td>
<td bgcolor="#60BCEB"><span class="style1"><strong>Productividad</strong> <br />
-Obregón aumentando sus mermas, cuidemos el dato.<br />
-Vallejo disminuyendo su número sigamos esta tendencia<br />
-El resto con buenos resultados sigamos así.</span></td>
</tr>
</table>
</body>
</html>
';
}
#------------------------------------#
# Codifica usr. name pepsico #
#------------------------------------#
sub codeusr {
local($tipo) = $_[0]; #tipo
local($l_str)= $_[1]; #usr code
local($l_sn) = $_[2]; #Ses No.
local($l_str2);
local($l_i);
local($l_j);
local($l_k);
local($l_l);
$l_str2 = "";
$l_sn = $l_sn. $l_sn. $l_sn;
for ($l_i = 0; $l_i<length ($l_str); $l_i++ ) {
$l_j = ord( substr($l_str, $l_i, 1) );
$l_l = substr($l_sn, $l_i, 1);
if ($l_tipo eq "CODE") {
if ($l_l > 4){
$l_k = $l_l - 5;
} else {
$l_k = $l_l;
}
$l_j = $l_j + $l_k;
if ( $l_j == 59 ) {
$l_j = "40";
}
if ( $l_j == 61 ) {
$l_j = "41";
}
if ( $l_j == 92 ) {
$l_j = "33";
}
} else {
if ( $l_j == 40 ) {
$l_j = "59";
}
if ( $l_j == 41 ) {
$l_j = "61";
}
if ( $l_j == 33 ) {
$l_j = "92";
}
if ( $l_l > 4) {
$l_k = $l_l - 5;
} else {
$l_k = $l_l;
}
$l_j = $l_j - $l_k
}
$l_str2= $l_str2. chr($l_j);
}
return $l_str2;
}
#-----------------------------------------------------------------------
#----------------------------------#
# Regresa hora y fecha actual #
#----------------------------------#
sub fecha
{
local(@var);
local($fec);
local($hor);
local(@var)= localtime(time);
$var[4]++;
for($i= 0; $i< 7; $i++ ){ if (length($var[$i]) < 2) {$var[$i]= "0". $var[$i]}; };
if ($var[5]< 90){$var[5]= $var[5]+ 2000}else{$var[5]= $var[5]+ 1900};
$fec = $var[4]. "/". $var[3]. "/". $var[5];
return $fec;
}
|
Entonces necesito pasar el valor de la función JavaScript en mes2
| Perl: | sub dsp_forma
{
$indicador= $in{"ind"};
$mes2=JavaScript& #058;:valor_Combo();
print '<iframe name="opcion2" src ="'. $tabla[$indicador][$mes2]. '" width="100%" height="1000px" FRAMEBORDER=0 align=middle > </iframe> ';
} |
|
|

Mar Ene 29, 2008 6:38 pm
|
 |
aneita
Perlero Nuevo

|
Registrado: 29 Ene 2008
Mensajes: 4
|
|
|
|
|
Lo que hace esto es que el
| HTML: | <td bgcolor="#77AB00"> </td>
<td width="682" valign="top" align="center" bgcolor="#77AB00"><div id="main" align="center">
<iframe name="opcion" src ="index2.html" width="100%" height="392px" FRAMEBORDER=0 align=middle > </iframe>
</div></td> |
me muestra una imagen y esto depende del mes que seleccione en el combo.
Me lee un archivo llamado tabla.txt donde está un arreglo de las imágenes que se van a mostrar al seleccionar el número del mes.
¡¡Espero que me entiendan y me puedan ayudar!!
¡¡Se los agradezco muchísimo!! |
|

Mar Ene 29, 2008 7:37 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3841
Ubicación: Valladolid, España
|
|
|
|
|
Lo que sospechaba...
Desde Perl en el lado del servidor, no puedes ejecutar una función JavaScript que está en el interior del cliente.
Humm... bueno, sí... pero bastante más complicado de lo que estás planteando. Y lo que planteas se puede resolver (al menos de lo poco que he entendido viendo tu código) de una forma más fácil.
A ver... el programa Perl (un CGI), genera un resultado en forma de HTML+JavaScript, que es lo que se envía al cliente. El cliente ve la lista desplegable, elige un valor y pulsa el botón de envío.
Al hacerlo, estamos ejecutando de nuevo el mismo cgi (en el lado del servidor). A este cgi se le pasan los valores que el usuario ha ingresado en el formulario, entre ellos, el valor del combo. Bueno, pues eso es lo que tienes que hacer: leer los parámetros pasados por el formulario form1. Y entonces, ya dispones del valor del combo para llamar a dsp_forma() y crear esa línea.
Lo que no puedes es llamar a funciones JavaScript que NO están siendo ejecutadas en el lado del servidor.
Es como si intentaras comprar caramelos con una plancha de impresión de billetes. Si, es un poco más pesado, pero tiene el aspecto de un billete, tiene el sello de la casa de la Moneda y del presidente del Banco Central, pero NO es un billete.
En tu caso, la "plancha" es el código HTML+JavaScript que reside dentro del cgi: no tiene vida porque no está siendo ejecutado en el mismo proceso que el propio cgi. Solo se activa cuando es interpretado y ejecutado por el cliente web del usuario. Debes leer lo que te devuelve ese usuario para saber qué valor del combo ha elegido. Y entonces ya tienes más información para hacer el iframe. |
|

Mie Ene 30, 2008 8:40 am
|
 |
aneita
Perlero Nuevo

|
Registrado: 29 Ene 2008
Mensajes: 4
|
|
|
|
|
Bueno, muchísimas gracias por su ayuda, le digo que nunca había trabajado con Perl, así es que sí me cuesta un poco...
Justo es lo que intento hacer:
| Cita: | | pues eso es lo que tienes que hacer: leer los parámetros pasados por el formulario form1. Y entonces, ya dispones del valor del combo para llamar a dsp_forma() y crear esa línea. |
Leer los parámetros y pasárselos a dsp_forma(), pero no tengo la más remota idea de cómo se hace eso. ¿Me podría orientar? ¡¡Muchísimas gracias!! |
|
Jue Ene 31, 2008 5:29 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3841
Ubicación: Valladolid, España
|
|
|
|
|
| Debería estar dentro de la variable $in{"ComboMes"}. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|