La ejecución de Javascript después de que el control del valor seleccionado se ha establecido

StackOverflow https://stackoverflow.com/questions/9341

  •  08-06-2019
  •  | 
  •  

Pregunta

Simple ASP.NET aplicación.

Tengo dos controles de lista desplegable.En el primer desplegable tengo un JavaScript onChange evento.El JavaScript que permite el segundo desplegable y elimina un valor (el valor seleccionado en la primera lista desplegable).Si hacen clic en el espacio en blanco el primer valor de la lista desplegable, a continuación, el segundo desplegable serán desactivadas (y las opciones de reinicio).

También tengo el código en la OnPreRender el método que se va a habilitar o deshabilitar el segundo desplegable basado en el valor de la primera lista desplegable.Esto es lo que el valor de la primera lista desplegable se puede seleccionar en el código (la carga de la configuración de usuario).

Mi problema es:

  1. El usuario selecciona algo en el primer desplegable.El segundo desplegable activará a través de JavaScript.
  2. Que, a continuación, cambiar una tercera desplegable que inicia un nuevo cargo.Después de la devolución de los desplegables están en el estado correcto (primer valor seleccionado, el segundo desplegable activado).
  3. Si, a continuación, haga clic en el botón atrás, el segundo desplegable dejará de ser habilitada, aunque debería ser, ya que hay algo seleccionado en la primera lista desplegable.

He intentado añadir un script de inicio (en la que se establece el estado correcto de la segunda desplegable) a través de ClientScript.RegisterStartupScript, sin embargo , cuando esto se llama el primer desplegable tiene un selectedIndex de 0, no lo que realmente es.Mi conjetura es que el valor de la selección se establece después de mi script de inicio (pero todavía no llame a la onChange la secuencia de comandos).

Alguna idea sobre qué intentar?

¿Fue útil?

Solución

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected void indexChanged(object sender, EventArgs e)
    {
        Label1.Text = " I did something! ";
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test Page</title>
</head>
<body>
    <script type="text/javascript">
        function firstChanged() {
            if(document.getElementById("firstSelect").selectedIndex != 0)
                document.getElementById("secondSelect").disabled = false;
            else
                document.getElementById("secondSelect").disabled = true;
        }
    </script>
    <form id="form1" runat="server">
    <div>
        <select id="firstSelect" onchange="firstChanged()">
            <option value="0"></option>
            <option value="1">One</option>
            <option value="2">Two</option>
            <option value="3">Three</option>
        </select>
        <select id="secondSelect" disabled="disabled">
            <option value="1">One</option>
            <option value="2">Two</option>
            <option value="3">Three</option>
        </select>
        <asp:DropDownList ID="DropDownList1" AutoPostBack="true" OnSelectedIndexChanged="indexChanged" runat="server">
            <asp:ListItem Text="One" Value="1"></asp:ListItem>
            <asp:ListItem Text="Two" Value="2"></asp:ListItem>    
        </asp:DropDownList>
        <asp:Label ID="Label1" runat="server"></asp:Label>
    </div>
    </form>
    <script type="text/javascript">
        window.onload = function() {firstChanged();}
    </script>
</body>
</html>

Editar:Sustituye el código en su totalidad.Esto debería funcionar incluso en el control de usuario.Creo que Registrarse.ClientScriptBlock no está funcionando porque el código que se escribe en ese bloque se ejecuta antes de de la ventana.onload se llama.Y, supongo (no estoy seguro de este punto) que los objetos DOM no tiene sus valores en ese momento.Y, esta es la razón por la que usted está consiguiendo selectedIndex como siempre 0.

Otros consejos

Si el segundo menú desplegable permitió inicialmente a través de javascript (estoy suponiendo que esto es durante un javascript onchange, ya que no especificó), a continuación, hacer clic en el botón atrás para volver a cargar la anterior devolución nunca va a activar.

La mezcla de ASP.NET con el clásico estilo de javascript puede ser peludo.Puede que desee echar un vistazo a ASP.NET's de la implementación de Ajax (o la de terceros AjaxPanel control si usted está obligado a usar un viejo ASP.NET la versión).Aquellos que se dan en el comportamiento que desea a través de la pura C#, sin obligarlos a recurrir a javascript trucos-pokery.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top