Rularea Javascript după ce valoarea selectată a controlului a fost setată

Simplă aplicație ASP.NET.

Am două controale de tip drop-down. Pe primul drop-down am un eveniment JavaScript peChange . JavaScript permite cel de-al doilea drop-down și elimină o valoare din acesta (valoarea selectată în primul drop-down). Dacă dau clic pe prima valoare necompletată a drop-down, atunci al doilea drop-down va fi dezactivat (iar opțiunile vor fi resetate).

De asemenea, am cod în metoda OnPreRender care va activa sau dezactiva al doilea drop-down pe baza valorii primului drop-down. Aceasta este astfel încât valoarea primului drop-down poate fi selectată în cod (încărcarea setărilor de utilizator).

Problema mea este:

  1. Utilizatorul selectează ceva în primul drop-down. Al doilea drop-down va fi activat prin JavaScript.
  2. Apoi schimba un al treilea drop-down care inițiază un post înapoi. După postarea înapoi, meniurile derulante sunt în starea corectă (prima valoare selectată, al doilea drop-down activat).
  3. Dacă apoi dau clic pe butonul din spate, cel de-al doilea drop-down nu va mai fi activat, deși ar trebui să fie deoarece există ceva selectat în primul drop-down.

Am încercat să adaug un script de pornire (care va stabili starea corectă a celei de-a doua drop-uri în jos) prin ClientScript.RegisterStartupScript , totuși atunci când acesta este numit primul drop-down are un din 0 , nu ceea ce este de fapt. Cred că valoarea selecției este setată după scriptul de pornire (dar încă nu apelează scriptul onChange ).

Orice idei despre ce să încercați?

0
fr hi bn

2 răspunsuri

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



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



    <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>
        
        
        
            
                
        
        
    </div>
    </form>
    <script type="text/javascript">
        window.onload = function() {firstChanged();}
    </script>
</body>
</html>

Editați: Înlocuit întregul cod. Acest lucru ar trebui să funcționeze chiar și în controlul utilizatorului. Cred că Register.ClientScriptBlock nu funcționează deoarece codul pe care îl scrieți în acel bloc este executat înainte de fereastra window.onload este apelată. Și, presupun (nu sunt sigur de acest punct) că obiectele DOM nu au valorile lor stabilite la acel moment. Și, de aceea primești selectatIndex ca întotdeauna 0.

0
adăugat

Dacă cea de-a doua meniuri este activată inițial prin JavaScript (presupun că aceasta este în timpul unui JavaScript onchange, deoarece nu ați specificat), apoi faceți clic pe butonul din spate pentru a reîncărca postarea anterioară nu o va permite niciodată.

Amestecarea ASP.NET cu JavaScript clasic poate fi păros. S-ar putea să doriți să aruncați o privire la implementarea Ajax ASP.NET (sau controlul AjaxPanel de la terți dacă sunteți forțat să utilizați o versiune mai veche ASP.NET). Acestea vă vor oferi comportamentul pe care îl doriți prin C# pur, fără a vă forța să apelați la hackery-pokery de la javascript.

0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com