03. maj 2007 - 12:03Der er
19 kommentarer og 1 løsning
Trigge event på klienten for at køre en JS-funktion
I en UpdatePanel har jeg bl.a. en RadioButtonList og en Tabel.
Tabellen gentegnes fint (med lidt andet indhold) når jeg trykker på en af mine radio buttons.
Jeg har brug for at køre en funktion på klienten, når der er blevet trykket på en af de radiobuttons i listen, men jeg kan ikke finde ud af hvordan jeg kan binde noget javascript til SelectedChanged eller noget..
Jeg har lavet en workaround, ved at jeg har lagt en lille usynlig image.gif inde i min update panel, fordi giffen har en onLoad-event på klienten:
og så kører min funktion: function IMG1_mytest() { var myTable = document.getElementById("<%=Table1.ClientID%>"); paintRows(myTable) }
Er der en smartere måde at løse det på ? Kan jeg binde min JS-funktion til min RadioButtonList på nogen måde? I givet fald, kom venligst med en kodestump, da jeg stadig famler rundt i JS, DOM osv osv:)
Nu er det altså en RadioButtonlist, og det accepterer VS ikke, da <asp:RadioButtonList ikke har sådan et event :-(
men hvis jeg bruger OnSelectedIndexChanged sådan her : <asp:RadioButtonList ID="rblPeriod" runat="server" AutoPostBack="True" RepeatDirection="Horizontal" OnSelectedIndexChanged="IMG1_mytest()"> så får jeg Error 2 'IMG1_mytest' is not a member of 'ASP.admin_blabla'.
for den vil tydeligvis kun spise noget der er defineret i min code-behind fil.
efter som siden jo reloades (godt nok partielt) - er der ikke noget med et window.onLoad event jeg kunne bruge ? Jeg kan leve med at hver reload trigger min funktion, ved bare ikke hvordan det skal skrives og hvor.
"onChange" virker kun i FF, men ej i IE (eller var det nu omvendt, hehe). "onclick" virker i IE, men i FF får jeg problemos. Jeg slås lidt videre med det senere og vender tilbage.
Nu eksekverer den med onclick i FF/IE - men gør ikke som jeg vil. Er rendt i et timing problem:
Min workaround : 1. Klikker på rblPeriod 2. Siden reloades 3. Min lille work_around ting kører, når den gif, som eventet var knyttet til, blev loaded (se mit første indlæg), efter den opdaterede tabel.
Ovenstående fungerede fint
Det nye, hvor der er et click-event på rblPeriod: 1. Klikker på rblPeriod 2. Min javascript-ting kører 3. Siden reloades
Pga af denne sekvens kører mit javescript på indholdet af den gamle side, mens det, jeg er ude efter, er at kunne manipulere noget på den nyloadede side. Jeg går ud fra at denne sekvens er den som tingene foregår i, idet en alert fra Js-kaldet dukker op på min skærm inden en msgBox, som jeg indsatte i min pageload.
Eftersom det, det gælder om ,er at lave noget om i en tabel som bliver reloadet, og naturligvis EFTER den er blevet reloaded, er der nogen måde at knytte en client-side onload event handler til tabellen, så først efter at den er loaded færdig at der køres noget script ? For ellers ser det ud til, at jeg skal beholde min lille workaround :-(
Alternativt kan jeg leve med et script som kører hver gang når siden loades (efter at tabeller er der, naturligvis), fordi så kan jeg samle data op fra nogle hidden fields som har beholdt deres værdi i den nye load. Igen , ved blot ikke hvordan jeg skal skrive det og hvor.
Heraf fremgår tydeligt, at <input har nogle events, men <input type=hidden har INGEN ! :-(
Jeg blev forvirret af Intellisense, som tillader at jeg tilføjer diverse events til en <input> (uden runat="server") , hvorpå disse totalt ignoreres ! :-(
I hh til denne artikel kan jeg selv tilføje en handler til hvad som helst på klienten, men jeg holder fast i min workaround - det er nemmere.
"Et på body.." jo, men jeg ved ikke hvordan - jeg har ingen <body> tag i min side da den sidder i masteren :-(, og det er stadig ikke lykkedes at få smidt JS ud i en ekstern fil.
Du kan bare lave et scripttag i bunden af din side og her lave dit funktionskald. <script type="text\javascript"> //dette funktions kald sker først når siden er færdigloadet. LavnogetForFanden(); </script>
Du kan også kombinerer det med settimeout. Som tillader dig at vente f.eks. 100 millisekunder før din funktion afvikles.
Det gælder om at få den funktion til at køre efter en opdatering, så min <image> som eventet er bundet til ligger i bunden af mit UpdatePanel.
<script type="text/javascript"> SetNewRange(); </script> Nu har jeg forsøgt som du foreslår - smed giffen ud, og samme sted (inde i ContentTemplate)lagde en script-stump, ligesom du angav med samme funktionskald som i giffens onload. Men funktionen kører ikke :-(
Jeg kan simpelthen ikke bruge mere tid på ting som jeg kan komme uden om på andre vis, så min udvikler sjæl bløder, mens min forretningssjæl siger "get on with it":-)
tak for det - men jeg er NØØØØDT til at lægge dette her til side. Har kopieret løsningen og når lejligheden byder sig så vil jeg forsøge mig. Tusind tak læg et svar pls.
hehe kender det godt :) Svar :) Håber det virker. Den kommer ihvertifald op hos mig hver gang.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.