Foros del Web » Programando para Internet » Javascript »

Ayuda con eventos de un select

Estas en el tema de Ayuda con eventos de un select en el foro de Javascript en Foros del Web. Buenas, lo que quiero hacer es lo siguiente: tengo un formulario, con un select que tiene dos opciones. la idea es que si clicko una ...
  #1 (permalink)  
Antiguo 17/02/2006, 16:16
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Ayuda con eventos de un select

Buenas, lo que quiero hacer es lo siguiente:

tengo un formulario, con un select que tiene dos opciones. la idea es que si clicko una de las opciones, se deshabilitan unos campos de texto del formulario. he probado lo siguiente:

<select name="oferta" class="selects" id="oferta" onChange="return oferta()">

function oferta(){

var fr1=document.forms.form1;

if(fr1.oferta.value=="Alquiler")
{
alert("Has seleccionado Alquiler");
fr1.oferta.focus();
return false
}
}

he intentado primero mostrar un alert en el caso de seleccionar una de las opciones, pero me da error:

el objeto no acepta este metodo

que hago mal?

como pongo un campo disabled=true?

salu2
  #2 (permalink)  
Antiguo 17/02/2006, 17:47
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
probá asi:

el select:
Cita:
<select name="oferta" class="selects" id="oferta" onChange="oferta(this.value)">
y la funcion:
Cita:
function oferta(sel){
if(sel.value=="Alquiler")
{
alert("Has seleccionado Alquiler");
document.forms['form1']['nombre del input a desabilitar'].disabled=true;
}
}

debes cambiar lo que está en rojo por el nombre del input que querés desabilitar(y si son varios,repetir la linea cambiando el nombre).

espero haberte entendido.

saludos
__________________
by Capitán Buscapina
.
  #3 (permalink)  
Antiguo 18/02/2006, 04:37
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias buscapina, pero no acaba de funcionarme. he puesto lo que me dices:

function oferta(sel){
if(sel.value=="Alquiler")
{
alert("Has seleccionado Alquiler");
//document.forms['form1']['nombre del input a desabilitar'].disabled=true;
}
}

he deshabilitado el tema del disabled y todo para comprobar que me sale lo del alert, y me sigue dando el error.

lo que me comentas que he de poner como valor de la funcion, sel, de donde sale? es correcto lo que tengo?

salu2
  #4 (permalink)  
Antiguo 18/02/2006, 04:48
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola ferranWEB

El error es porque estás llamadon oferta a la función y al select. Además en el código de Cap.Buscapina sobra el .value de la línea if(sel.value=="Alquiler")

Te pongo el código completo a ver si te funciona:
Código:
<html>
<head>
<script type="text/javascript">
function veroferta(sel){
if(sel=="Alquiler")
{
alert("Has seleccionado Alquiler");
document.forms['form1']['algo'].disabled=true;
}
}
</script>
</head>
<body>
<form name="form1">
<select name="oferta" class="selects" id="oferta" onchange="veroferta(this.value)">
<option value="Venta">Venta</option>
<option value="Alquiler">Alquiler</option>
</select>
<input type="text" name="algo" />
</form>
</body>
</html>
Saludos,
  #5 (permalink)  
Antiguo 18/02/2006, 05:05
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
funciona a la perfeccion javierb, muchas gracias.

aprovecho que te tengo por aqui para hacerte una consulta. de que forma puedo hacer desaparecer una combo?

la idea es que si clickas en alquiler salga una combo con dos opciones, y si clickas en compra con otras. la idea seria algo asi:

alquiler->Pisos, Casas

compra-> Pisos, Casas, Duplex...

lo digo pq si entran en alquiler, me interesa q el valor de la combo sea diferente. no se si hay que tener dos selects diferentes, o se puede modificar el valor de la combo al seleccionar aqlquiler.

salu2

salu2
  #6 (permalink)  
Antiguo 18/02/2006, 06:43
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

A mí me parece mejor utilizar un solo select y añadir o borrar opciones según sea necesario:
Código:
<html>
<head>
<script type="text/javascript">
function cambiar(num) {
  obj = document.forms[0]['sel'];
  if(num==0) { // borrar lo que sobra
    obj.options[3]=null;
    obj.options[2]=null;
  }
  else { // añadir lo que falta
    obj.options[2] = new Option('Duplex','duplex');
    obj.options[3] = new Option('Barraca','barraca');
  }
}
</script>
</head>
<body>
<form>
<select onchange="cambiar(this.selectedIndex)">
<option value="alquiler">Alquiler</option>
<option value="compra">Compra</option>
</select>
<select name="sel">
<option value="pisos">Pisos</option>
<option value="casas">Casas</option>
</select>
</form>
</body>
</html>
Saludos,
  #7 (permalink)  
Antiguo 18/02/2006, 08:44
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias javierb, pero no consigo hacer una cosa. los dos codigos por separado me funcionan, es decir, la funcion veroferta() me modifica los valores de los campos con el enabled=true, y el otro me cambia el valor del select dependiendo del valor que clicko.

el problema es que las dos funciones deben de ejecutarse en elmismo evento onChange, tanto el de cambiar el enabled como el de modificar el contenido del select.

como puedo hacer para tener un codigo unificado? no lo consigo, soy aldo durillo para el flash, trabajo con php y flash.

y otra cosa, al igual que el enabled=true me deshabilita un text, como puedo hacerlo invisible para que desaparezca?

salu2
  #8 (permalink)  
Antiguo 18/02/2006, 10:15
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Rehola.

Si lo he entendido bien, pon el textbox así:

<input type="text" name="algo" style="visibility:hidden" />

y cambia un poco la función que te puse en el último mensaje:
Código:
function cambiar(num) {
  obj = document.forms[0]['sel'];
  if(num==0) { // borrar lo que sobra
    obj.options[3]=null;
    obj.options[2]=null;
    document.forms['form1']['algo'].style.visibility = 'hidden';
  }
  else { // añadir lo que falta
    obj.options[2] = new Option('Duplex','duplex');
    obj.options[3] = new Option('Barraca','barraca');
    document.forms['form1']['algo'].style.visibility = 'visible';
  }
}
Saludos,
  #9 (permalink)  
Antiguo 18/02/2006, 10:56
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
javierb,no se si no nos entendimos,pero eso no funciona. el tema del ocultar y mostrar los texts o selects dependiendo de si es compra o alguiler, perfecto. una cosa, al igual que pongo o quito el campo, puedo hacer lo mismo con el texto?

por ejemplo:

Tipo: select...

puedo ocultar el texto tipo?

y lo otro, no se si no nos entendimos o que, pero no me funciona. tengo estos dos selects:

Código:
<select name="oferta" class="selects" id="oferta" onChange="veroferta(this.value)">

              <option value="Compra">Compra</option>
              <option value="Alquiler">Alquiler</option>
</select>

<select name="tipo" class="selects" id="select4">
                  <option value="Piso">Piso</option>
                  <option value="Casa">Casa</option>
                  <option value="Duplex">Duplex</option>
                  <option value="Planta Baja">Planta Baja</option>
                  <option value="Atico">&Aacute;tico</option>
</select>

y la idea es que si selecciono compra, se queda el select tipo igual. en cambio, si pongo alquiler, tienen que quedarse unicamente el piso y casa del select tipo, y quitar los otros tres.
y a su vez, mostrar y ocultar los campos q me interesen, tal y como me has indicado. aver si conseguimos matar esto!! jajaaa

y muchas gracias
  #10 (permalink)  
Antiguo 18/02/2006, 10:56
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
javierb,no se si no nos entendimos,pero eso no funciona. el tema del ocultar y mostrar los texts o selects dependiendo de si es compra o alguiler, perfecto. una cosa, al igual que pongo o quito el campo, puedo hacer lo mismo con el texto?

por ejemplo:

Tipo: select...

puedo ocultar el texto tipo?

y lo otro, no se si no nos entendimos o que, pero no me funciona. tengo estos dos selects:

Código:
<select name="oferta" class="selects" id="oferta" onChange="veroferta(this.value)">

              <option value="Compra">Compra</option>
              <option value="Alquiler">Alquiler</option>
</select>

<select name="tipo" class="selects" id="select4">
                  <option value="Piso">Piso</option>
                  <option value="Casa">Casa</option>
                  <option value="Duplex">Duplex</option>
                  <option value="Planta Baja">Planta Baja</option>
                  <option value="Atico">&Aacute;tico</option>
</select>

y la idea es que si selecciono compra, se queda el select tipo igual. en cambio, si pongo alquiler, tienen que quedarse unicamente el piso y casa del select tipo, y quitar los otros tres.
y a su vez, mostrar y ocultar los campos q me interesen, tal y como me has indicado. aver si conseguimos matar esto!! jajaaa

y muchas gracias
  #11 (permalink)  
Antiguo 18/02/2006, 13:48
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
javierb, puedes ayudarme?
  #12 (permalink)  
Antiguo 19/02/2006, 04:24
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
A ver, porque me parece que nos estmos liando

Prueba este código a ver si es lo que necesitas:
Código:
<html>
<head>
<script type="text/javascript">
function veroferta(valor) {
  obj = document.forms[0]['tipo'];
  if(valor=='Alquiler') { // borrar lo que sobra
    obj.options[4]=null;
    obj.options[3]=null;
    obj.options[2]=null;
    document.getElementById('algo').style.visibility = 'hidden';
  }
  else { // añadir lo que falta
    obj.options[2] = new Option('Duplex','Duplex');
    obj.options[3] = new Option('Planta Baja','Planta Baja');
    obj.options[4] = new Option('Atico','&Aacute;tico');
    document.getElementById('algo').style.visibility = 'visible';
  }
}
</script>
</head>
<body>
<form>
<select name="oferta" class="selects" id="oferta" onChange="veroferta(this.value)">

              <option value="Compra">Compra</option>
              <option value="Alquiler">Alquiler</option>
</select>

<select name="tipo" class="selects" id="select4">
                  <option value="Piso">Piso</option>
                  <option value="Casa">Casa</option>
                  <option value="Duplex">Duplex</option>
                  <option value="Planta Baja">Planta Baja</option>
                  <option value="Atico">&Aacute;tico</option>
</select>
<p id="algo">Tipo: <input type="text" /></p>
</form>
</body>
</html>
Saludos,
  #13 (permalink)  
Antiguo 19/02/2006, 10:07
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
perfecto javierb, ahora esta perfecto.

solo una cosa, me desaparece con el hidden el campo de texto, pero hay alguna forma de hacer desaparecer la celda? me explico, el campo de texto tiene un titulo, es decir:

Habitaciones= text

desaparece el text, puedo llegar a hacer desaparecer tb el texto de habitaciones?

salu2 y gracias
  #14 (permalink)  
Antiguo 19/02/2006, 10:50
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Esta última parte no la entiendo ¿o será que ya tengo la neurona un poco desgastada?

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 01:22.