Foros del Web » Programando para Internet » Javascript »

tratar inputs de nombre variable

Estas en el tema de tratar inputs de nombre variable en el foro de Javascript en Foros del Web. Hola, Tengo problemas con un código de javascript porque genero los nombres de los inputs dinamicamente con php. Es decir, en ocasiones el input se ...
  #1 (permalink)  
Antiguo 20/08/2006, 20:55
 
Fecha de Ingreso: agosto-2006
Mensajes: 16
Antigüedad: 17 años, 8 meses
Puntos: 0
tratar inputs de nombre variable

Hola,
Tengo problemas con un código de javascript porque genero los nombres de los inputs dinamicamente con php. Es decir, en ocasiones el input se llama "input1", en otras "input4"...dependiendo de lo que se haya seleccionado en la página anterior.

El caso es que me gustaria que algunos de esos inputs se habilitase/deshabilitasen al pinchar en uno u otro de mis dos "radios", y el problema que tengo es al generar en javascript el nombre de los inputs. Este es el código de javascript que he hecho:

Código:
function EstableceEstadon(numero) {

var VarEmail_pre="para_email" + numero;
var VarAsunto_pre="Asunto_pre" + numero;
var VarAdjunto_pre="Adjunto_pre" + numero;
var VarMensaje_pre="Mensaje_pre" + numero;

if (document.inserta_predefinidos.VarEmail_pre[1].checked) {

//problema:VarEmail_pre[1] devuelve el caracter 1 de VarEmail_pre , es decir,
// una a!!como hago para ke pille VarEmail_pre como el nombre del radio y no como 
//un string cualkiera?

document.inserta_predefinidos.VarAsunto_pre.disabled = false
document.inserta_predefinidos.VarAdjunto_pre.disabled = false
document.inserta_predefinidos.VarMensaje_pre.disabled = false

} else{

document.inserta_predefinidos.VarAsunto_pre.disabled = true
document.inserta_predefinidos.VarAdjunto_pre.disabled = true
document.inserta_predefinidos.VarMensaje_pre.disabled = true

}

}
window.onload = EstableceEstadon(numero);
if (document.captureEvents) { //N4 requiere invocar la funcion captureEvents
document.captureEvents(Event.LOAD)
}

</script>
este sería el código de los radios:

Código:
echo"<input type="radio" name="para_email$n" value="N" onClick="EstableceEstadon($n)" $checked1> No crear emails a partir de este aviso";
echo"<br>";
echo"<input type="radio" name="para_email$n" value="S" onClick="EstableceEstadon($n)" $checked2> Crear emails a partir de este aviso";
alguien sabria decirme como solucionarlo? como debo hacer para que en nombre que genero me lo interprete como el nombre de un radio y no como un string normal?

Muchas gracias :)
  #2 (permalink)  
Antiguo 21/08/2006, 02:21
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 5 meses
Puntos: 61
Prueba a poner:

document.inserta_predefinidos[VarEmail_pre][1];

__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #3 (permalink)  
Antiguo 21/08/2006, 07:35
 
Fecha de Ingreso: agosto-2006
Mensajes: 16
Antigüedad: 17 años, 8 meses
Puntos: 0
ligera mejoria

Muchisimas gracias por la ayuda, genial :D . Solo tengo aun un fallo: al cargar la página, si esta marcado por defecto el radio de deshabilitar, los inputs aun siguen mostrandose.Es a partir del siguiente click cuando ya se deshabilitan los campos. Alguna idea brillante mas que me solucione el problema?

Dejo aquí mil código "casi" correcto por si le sirve a alguien:
Código:
<script language="javascript" type="text/javascript">

function EstableceEstadon(numero) {

var VarEmail_pre="para_email" + numero;
var VarAsunto_pre="Asunto_pre" + numero;
var VarAdjunto_pre="Adjunto_pre" + numero;
var VarMensaje_pre="Mensaje_pre" + numero;



if (document.inserta_predefinidos[VarEmail_pre][1].checked) {


document.inserta_predefinidos[VarAsunto_pre].disabled = false
document.inserta_predefinidos[VarAdjunto_pre].disabled = false
document.inserta_predefinidos[VarMensaje_pre].disabled = false

} else{

document.inserta_predefinidos[VarAsunto_pre].disabled = true
document.inserta_predefinidos[VarAdjunto_pre].disabled = true
document.inserta_predefinidos[VarMensaje_pre].disabled = true

}

}
window.onload = EstableceEstadon(numero);
if (document.captureEvents) { //N4 requiere invocar la funcion captureEvents
document.captureEvents(Event.LOAD)
}




</script>
Muchas gracias d enuevo y un saludo

Última edición por AiLaa; 21/08/2006 a las 07:58 Razón: voy cambiando a medida que voy probando
  #4 (permalink)  
Antiguo 21/08/2006, 08:07
 
Fecha de Ingreso: agosto-2006
Mensajes: 16
Antigüedad: 17 años, 8 meses
Puntos: 0
Problema localizado pero no solucionado

He descubierto que el problema es con el parámetro de la función. Supongo (no se seguro si será por eso) que al cargar la página la variable numero esta vacia y entonces genera mal los nombres de los inputs y por eso no funciona. O simplemente como la variable esta vacía, no llama a la función. ¿Hay alguna forma de pasarle el valor al cargar la página?¿con un onLoad en el body quizas? no estoy muy segura de como hacerlo

Gracias
  #5 (permalink)  
Antiguo 21/08/2006, 08:32
Avatar de Kamarada_Malkav  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid
Mensajes: 70
Antigüedad: 18 años, 6 meses
Puntos: 0
Hola AiLaa

Puedes llamar a la función desde el evento onLoad de la etiqueta <body>

Código:
<body onLoad="EstableceEstadon(X)">
A la función le pasas por parámetro el valor que necesites para que esos campos se deshabiliten.

Saludos.
  #6 (permalink)  
Antiguo 21/08/2006, 09:49
 
Fecha de Ingreso: agosto-2006
Mensajes: 16
Antigüedad: 17 años, 8 meses
Puntos: 0
varios body onLoad ?

El problema es que el código de los radios esta dentro de un bucle for y la variable numero va desde 1 hasta n (n varía), es decir, que tendria que poner n veces lo del body onLoad para cada variable numero (no se si me explico bien), y creo ke no es correcto, ¿o se pueden hacer varias llamadas desde ahi?

Gracias de nuevo.
  #7 (permalink)  
Antiguo 21/08/2006, 10:13
 
Fecha de Ingreso: agosto-2006
Mensajes: 16
Antigüedad: 17 años, 8 meses
Puntos: 0
Pues si que se podia

Yo sola me he contestado a mi pregunta, de todas formas la dejo por aqui por si a alguien le vale. Si que se pueden pasar varias funciones en el onload. Este es mi codigo:(sustituye a la linea que tu me proponias)

Código:
      $body="<body ";
      $j=1;
      if(isset($_POST['num_filas'])){//si hay que habilitar/deshabilitar...
         $body.="onLoad=\"";
			   for($i=1;$i<=$_POST['num_filas'];$i++) {
				    $key= "check".$i;
      			            if(!empty($_POST[$key])){		   	
                                           $body.="EstableceEstadon($j);";
                                           $j++;
                                    }
                           }
      }
      $body.="\">";
      echo $body;
(...)
Para que pueda ser de mas ayuda matizaré que la linea
Código:
$body.="EstableceEstadon($j);";
sustituye a la llamada de la funcion donde está el codigo de los radios que se hace más abajo.... (un poco lio, no? :P )
  #8 (permalink)  
Antiguo 22/08/2006, 02:42
Avatar de Kamarada_Malkav  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid
Mensajes: 70
Antigüedad: 18 años, 6 meses
Puntos: 0
Pues aunque no fuera muy exacta mi contestación (no tengo casi idea de php) me alegro de que te ayudase a que tu sóla encontrarses la respuesta. Es mucho mejor así, se aprende más jejeje.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:57.