Problemas con onchange

De nuevo Carlos, tengo otro problema en el que espero puedas echarme una mano.
Después de hacer la lista desplegable con la que me ayudaste intento que nada más elegir una opción se me muestre en la misma página la opción elegida, más que nada para saber que me funciona el onchange pero después de probarlo varias veces parece que no hace nada. Elijo una opción y ahí me quedo.
Te muestro el código de mi página a ver si se me ha pasado poner algo:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
   <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
   <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
   <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Catalogo</title>
<script language="javascript" type="text/javascript">
            var obj;
            function muestra(){//cojo la opcion elegida y se la envio a un servlet
                obj=newXMLHttpRequest();
                var opci = document.getElementById("seccion");
                var elegida = opci.options[opci.selectedIndex].value;
                obj.open("GET","opera?opcion="+elegida,true);
                obj.onreadystatechange=mostrardatos;
                enviar();
            }
            function enviar(){
                obj.send(null);
            }
            function mostrardatos(){//creo una tabla con los datos recibidos del servlet.....
                if(obj.readyState==4){
                    var raiz=obj.responseXML;
                    var op=raiz.getElementsByTagName("opcion").item(0);
                    var tabla="<table border='1'>";
                    tabla+="<tr>";
                    tabla+="<th>Opcion elegida: </th>";
                    tabla+="</tr>";
                    tabla+="<tr>";
                    tabla+="<td>"+op.firstChild.nodeValue+"</td>";
                    tabla+="</tr></table>";
                    document.getElementById("datos").innerHTML=tabla;
                }
            }
        </script>
</head>
<body>
<h1>Elige seccion: </h1>
<html:select property="seccion" onchange="muestra();" value="0">
<html:option value="0">
                Selecciona una sección:
</html:option>
<html:optionsCollection name="listasec"/>
</html:select>
<div id="datos"></div>
//muestro la opcion elegida
</body>
</html>
Tengo un servlet llamado opera al que le paso el valor seleccionado y me lo devuelve en un mensaje xml que descifro con la función mostrardatos. Usé el depurador en el servlet pero no llego a entrar nunca en él. ¿Sabes por qué puede estar pasando esto?
Perdonar por abusar de tu paciencia y muchas gracias por la ayuda!

1 Respuesta

Respuesta
1
¿Has probado a meter un alert('hola') al principio de la función "muestra()"?
Hola de nuevo Carlos, tengo otro problema en el que espero puedas echarme una mano.
Después de hacer la lista desplegable con la que me ayudaste intento que nada más elegir una opción se me muestre en la misma página la opción elegida, más que nada para saber que me funciona el onchange pero después de probarlo varias veces parece que no hace nada. Elijo una opción y ahí me quedo.
Te muestro el código de mi página a ver si se me ha pasado poner algo:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
   <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
   <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
   <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Catalogo</title>
<script language="javascript" type="text/javascript">
            var obj;
            function muestra(){//cojo la opcion elegida y se la envio a un servlet
                obj=newXMLHttpRequest();
                var opci = document.getElementById("seccion");
                var elegida = opci.options[opci.selectedIndex].value;
                obj.open("GET","opera?opcion="+elegida,true);
                obj.onreadystatechange=mostrardatos;
                enviar();
            }
            function enviar(){
                obj.send(null);
            }
            function mostrardatos(){//creo una tabla con los datos recibidos del servlet.....
                if(obj.readyState==4){
                    var raiz=obj.responseXML;
                    var op=raiz.getElementsByTagName("opcion").item(0);
                    var tabla="<table border='1'>";
                    tabla+="<tr>";
                    tabla+="<th>Opcion elegida: </th>";
                    tabla+="</tr>";
                    tabla+="<tr>";
                    tabla+="<td>"+op.firstChild.nodeValue+"</td>";
                    tabla+="</tr></table>";
                    document.getElementById("datos").innerHTML=tabla;
                }
            }
        </script>
</head>
<body>
<h1>Elige seccion: </h1>
<html:select property="seccion" onchange="muestra();" value="0">
<html:option value="0">
                Selecciona una sección:
</html:option>
<html:optionsCollection name="listasec"/>
</html:select>
<div id="datos"></div>
//muestro la opcion elegida
</body>
</html>
Tengo un servlet llamado opera al que le paso el valor seleccionado y me lo devuelve en un mensaje xml que descifro con la función mostrardatos. Usé el depurador en el servlet pero no llego a entrar nunca en él. ¿Sabes por qué puede estar pasando esto?
Perdonar por abusar de tu paciencia y muchas gracias por la ayuda!
Me he dado cuenta de que en el html:select uso property="seccion" para identificar el select en el documento pero en la función muestra uso:
var opci = document.getElementById("seccion");
Para obtener el valor elegido... es decir le digo que busque un elemento con el id sección cuando no tengo ese elemento. He probado a añadir id="seccion" al html:select pero no me deja, ¿sabes cómo podría arreglar esto?
Prueba con:

<html:select styleId="seccion">
Gracias por tus ayudas Carlos, ya he avanzado un poco más :)
Ok. No olvides valorar mi respuesta (positiva o negativamente) para que quede cerrada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas