Avatar billede conehead Nybegynder
20. april 2006 - 16:27 Der er 16 kommentarer og
1 løsning

Disabled knap aflyser event

Jeg kører et clientside script der disabler en asp:button, når man klikker på den. Dette gør dog at jeg aldrig modtager et serverside event fra denne knap. Hvis jeg i mit script ændrer knappens visibility til hidden, får jeg et serverside event.

Er der en smart måde(og måske en smule logik eller docs) at gøre således, at knappen disables og jeg fortsat får mit serverside event?
Avatar billede dansermeddhtml Nybegynder
20. april 2006 - 17:19 #1
Det lyder lidt bagvendt - hvad skal du bruge det til?
Du kunne muligvis bare vente med at disable knappen til efter formen bliver postet..
Avatar billede snepnet Nybegynder
20. april 2006 - 17:31 #2
nu ved jeg ikke hvordan du har gjort det - men du kan se en løsning her:
http://www.codekeep.net/snippets/0d583813-afb1-435b-a39d-d42c06ffc39b.aspx
mvh
Avatar billede dr_chaos Nybegynder
20. april 2006 - 19:28 #3
Du kan også bruge noget i denne stil
<asp:button id="btn" Runat="Server" Onload="btn_load" Text="Test" />

i codebehind
protected void btn_load(object sender, EventArgs e)
    {
        //script som forhindre at bruger trykker mere end en gang
        Button btn = (Button)sender;
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("if (typeof(Page_ClientValidate) == 'function') { ");
        sb.Append("if (Page_ClientValidate() == false) { return false; }} ");
        sb.Append("this.value = 'Vent venligst...';");
        sb.Append("this.disabled = true;");
        sb.Append(ClientScript.GetPostBackEventReference(btn, ""));
        sb.Append(";");
        btn.Attributes.Add("onclick", sb.ToString());
    }
Avatar billede dr_chaos Nybegynder
20. april 2006 - 19:29 #4
Den forhindrer at en bruger kan trykke 2 gange i træk på en knap.
Avatar billede conehead Nybegynder
21. april 2006 - 09:21 #5
Det virker jo udmærket. Jeg ønsker også at man kun kan trykke en gang på knappen. Det vil jeg gøre ved ændre knappens udseende, så brgueren kan se en tydelig forskel.

clientside:
//onclick client event does not trigger serverside event!!!
function ClientSearchButtonClick(buttonId )
{
  document.getElementById(buttonId).disabled=true;
}

//onclick client event does trigger serverside event!!!
function ClientSearchButtonClick(buttonId )
{
  document.getElementById(buttonId).style.visibility="hidden";
}
Så modtager jeg stadig et serverside event.

Kan jeg i det første script udløse mit serverside click event?
Avatar billede conehead Nybegynder
21. april 2006 - 09:35 #6
Alternativt kunne jeg vise en helt anden knap, som til at starte med er skjult...På den måde kan jeg sætte den oprindelige knap til "hidden" og stadig få vist en "nedsænket" knap
Avatar billede dr_chaos Nybegynder
21. april 2006 - 09:37 #7
Er det til mig eller snepnet du skriver ?
Avatar billede rasserw Nybegynder
21. april 2006 - 10:15 #8
Hej,
Det kan gøres programmatisk sådan her:

override protected void OnInit(EventArgs e)
{
    Button1.Attributes.Add("onclick", "java script:" + Button1.ClientID + ".disabled=true;" + Page.GetPostBackEventReference(Button1));

    base.OnInit(e);
}

Den gør begge dele, nemlig modvirker 2xklik og fanger postback eventen fint.

Venligst
Arne Johansen
www.frameworker.net
Avatar billede dr_chaos Nybegynder
21. april 2006 - 10:33 #9
problemet med den er at den ikke tager højde for validering af siden.
Den er basalt set den samme som min.
Avatar billede dr_chaos Nybegynder
21. april 2006 - 10:37 #10
I den funktion hvor du fanger knappens postback event kan du sætte
btn.Enabled = false;
Så er den disabled også efter postback.
Avatar billede conehead Nybegynder
21. april 2006 - 11:35 #11
Jeg mente, at jeg havde forsøgt mig med Snepnets eksempel, men ideen med at disable knappen var jo, at så er det ikke muligt for brugeren at trykke to gange og så er jeg ude over den problematik med 2 x klik.

For god orden skyld arbejder jeg med 1.1 frameworket.
Avatar billede dr_chaos Nybegynder
21. april 2006 - 11:43 #12
ved min skal den ændre til:
protected void btn_load(object sender, EventArgs e)
    {
        //script som forhindre at bruger trykker mere end en gang
        Button btn = (Button)sender;
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("if (typeof(Page_ClientValidate) == 'function') { ");
        sb.Append("if (Page_ClientValidate() == false) { return false; }} ");
        sb.Append("this.value = 'Vent venligst...';");
        sb.Append("this.disabled = true;");
        sb.Append(Page.GetPostBackEventReference(btn));
        sb.Append(";");
        btn.Attributes.Add("onclick", sb.ToString());
    }

virker den under 1.1
Avatar billede dr_chaos Nybegynder
21. april 2006 - 11:44 #13
Den er lavet så den er generisk det vil sige at den sagtens kan bruges på flere knapper på siden.
Avatar billede conehead Nybegynder
01. maj 2006 - 12:59 #14
tak chaos og undskyld det sene svar. Det var netop det jeg ville.
Avatar billede dr_chaos Nybegynder
01. maj 2006 - 13:02 #15
helt fint:)
smider lige et svar :)
Avatar billede conehead Nybegynder
05. maj 2006 - 13:04 #16
det var ikke et svar :-)
Avatar billede dr_chaos Nybegynder
05. maj 2006 - 13:17 #17
snøft lærer det aldrig :(
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