Avatar billede neoman Novice
03. maj 2007 - 12:03 Der 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:

  <img id="IMG1" src="../Img/CalendarIcon.gif" onload="IMG1_mytest()"/>

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:)
Avatar billede dr_chaos Nybegynder
03. maj 2007 - 12:05 #1
har du prøvet med onChange="IMG1_mytest();" i din dropdownlist
Avatar billede neoman Novice
03. maj 2007 - 12:23 #2
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.
Avatar billede neoman Novice
03. maj 2007 - 12:35 #3
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.
Avatar billede neoman Novice
03. maj 2007 - 12:36 #4
og OnSelectedIndexChanged="java script:IMG1_mytest();" brokker VS sig også over.
Avatar billede dr_chaos Nybegynder
03. maj 2007 - 14:29 #5
i vs er der mange evens som ikke findes.
onkeyup på en textbox osv.
Men derfor virker de alligevel.

prøv at smide det her i page_load:
for(int i = 0; i<rbl.Items.Count - 1;i++)
{
rblPeriod.Items[i].Attributes.Add("onChange", "alert('hej');")
}
Avatar billede neoman Novice
03. maj 2007 - 15:46 #6
"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.
Avatar billede dr_chaos Nybegynder
03. maj 2007 - 17:44 #7
hehe.
Problemet er at en radiobuttonlist bliver dannet om til span.
Så det er formodentlig på span at du skal finde den rette property
Avatar billede neoman Novice
03. maj 2007 - 18:07 #8
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 :-(
Avatar billede neoman Novice
03. maj 2007 - 18:12 #9
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.
Avatar billede neoman Novice
03. maj 2007 - 18:27 #10
tihi - mine <input type=hidden  >..  HAR et onload event på klienten, så det arbejder jeg videre med :-)
Avatar billede dr_chaos Nybegynder
03. maj 2007 - 19:22 #11
Der er også et på body som måske kan bruges.
Avatar billede neoman Novice
04. maj 2007 - 10:46 #12
<input type=hidden virkede ikke som trigger, og det tog en hulens tid at finde ud af hvorfor:

Her er en fortegnelse over events som de forskellige sideelementer er "født" med :

http://www.comptechdoc.org/independent/web/cgi/javamanual/javaevents.html

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.

http://www.webpusher.ie/articles/code/externalising-javascript.html

"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.
Avatar billede dr_chaos Nybegynder
04. maj 2007 - 17:00 #13
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.
Avatar billede neoman Novice
04. maj 2007 - 17:18 #14
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 :-(
Avatar billede dr_chaos Nybegynder
04. maj 2007 - 17:27 #15
prøv at teste med.
<script type="text/javascript">
alert('afaf');
</script>
Avatar billede neoman Novice
04. maj 2007 - 19:05 #16
Den kører kun een gang - når siden loades.

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 hjælpen læg et svar.
Avatar billede dr_chaos Nybegynder
04. maj 2007 - 20:41 #17
hohoho jeg fandt en løsning:
<form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" >
   
        </asp:ScriptManager>
        <script type="text/javascript">
     
      Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);
       
     
        function pageLoaded(sender, args) {
          alert('afsasf');
       
        }
    </script>
        <div>
        <asp:UpdatePanel ID="pnl"  runat="server" UpdateMode="Conditional">
        <ContentTemplate>
        <asp:TextBox ID="tex" runat="server"></asp:TextBox>
        <asp:Button ID="btn" runat="server" OnClick="test" Text="test" />
       
        </ContentTemplate>
        </asp:UpdatePanel>
        </div>
    </form>
Avatar billede dr_chaos Nybegynder
04. maj 2007 - 20:42 #18
jeg tror ikke at <asp:ScriptManager ID="ScriptManager1" runat="server" >
 
        </asp:ScriptManager>
behøves nok ikke at være på siden.
men alt det inde i script skal være placeret inden for formtag.
Avatar billede neoman Novice
04. maj 2007 - 22:35 #19
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.
Avatar billede dr_chaos Nybegynder
04. maj 2007 - 22:47 #20
hehe kender det godt :)
Svar :)
Håber det virker.
Den kommer ihvertifald op hos mig hver gang.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester