# Todella hieno ristiselkäinen tapa tehdä DefaultButtons -juttu - niin, että kun painat sisään, oikea painike "napsahtaa"

<datetime class="hidden">2004-03-24T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported, ASP.NET, JavaScript, UI Automation, Event Handling -->
Tämä on yksi suurimmista UI-ongelmista, jotka johtuvat pääasiassa ASP.NETin "yhden muodon" säännöstä, koska [Darrell](http://dotnetjunkies.com/WebLog/darrell.norton/) On olemassa useita ratkaisuja, mutta mikään niistä ei ratkaise koko ongelmaa (eli kaikille selaimille), no nyt on olemassa loistava ratkaisu - [Darrell Nortonin blogi](http://dotnetjunkies.com/WebLog/darrell.norton/) ([linkki](http://dotnetjunkies.com/WebLog/darrell.norton/archive/2004/03/03/8374.aspx)): (Tehty uudelleen täällä, koska en löydä sitä enää koskaan...)

> ## [*Lähetän oletusnappeja, kun käyttäjä painaa Enter-näppäintä - vihdoin!*](http://dotnetjunkies.com/WebLog/darrell.norton/archive/2004/03/03/8374.aspx)
> 
> *Yksi vaikeimmista asioista verkkokehityksessä on tietyn painikkeen saaminen, jos sivulla on useampi kuin yksi painike.* [*Metabuilderit*](http://www.metabuilders.com/) *Fame, on sellainen, joka toimii myöhäismallisille selaimille.*
> 
> *Julkiselle verkkokauppasivustolle asetettujen melko tiukkojen asiakasvaatimusten vuoksi tarvitsin jotain, joka meni kauemmas selainhistoriasta. Löysin koodinäytteen* [*Janus Kampin Hansen*](http://www.kamp-hansen.dk/pages/showdoc.asp?id=28&menuid=21&menuid=18) *se toimi vain IE:llä.*
> 
> *Laajennin sen toimimaan Mozillan ja Netscape 6+:n kanssa ja lisäsin siihen lisää koodia, jotta se toimisi useimpien Netscape 4+ -selainten kanssa. Sitten säädin suoritusta hieman, ja se on se! Nopea, helppokäyttöinen koodinvaimennin, jolla pakotetaan tiettyjä nappeja ampumaan kehittäjän määräämistä tekstilaatikoista.*
> 
> *Kopioi tämä menetelmä ensin helppopääsyiseen paikkaan:*
> 
> *julkinen tyhjiö SetDefaultButton (sivu, TextBox textControl, Button oletusButton)*
> 
> *{*
> 
>       *// Sets default buttons.*
>     
>       *// Originally created by Janus Kamp Hansen - http://www.kamp-hansen.dk*
>     
>       *// Extended by Darrell Norton - http://dotnetjunkies.com/weblog/darrell.norton/* 
>     
>       *//   -- added Mozilla support, fixed a few issues, improved performance*
>     
>       *string theScript = @"*
> 
> *&lt;SKIPT-kieli="javascript"&gt;*
> 
> *Funktio fnTrapKD(btn, tapahtuma){*
> 
> *if (document.all) {*
> 
> *Suomennos: Michael T. Francis Pinmontagne SUBHEAVEN.ORG*
> 
> *event.returnValue=false;*
> 
> *Tapahtuma.cancel = totta;*
> 
> *btn.klikkaa();*
> 
> *}*
> 
> *}*
> 
> *Muu if (document.getElementById){*
> 
> *Jos (tapahtuma, joka koskee 13:a)*
> 
> *event.returnValue=false;*
> 
> *Tapahtuma.cancel = totta;*
> 
> *btn.klikkaa();*
> 
> *}*
> 
> *}*
> 
> *Muu if(document.layers){*
> 
> *Suomennos: Michael T. Francis Pinmontagne SUBHEAVEN.ORG*
> 
> *event.returnValue=false;*
> 
> *Tapahtuma.cancel = totta;*
> 
> *btn.klikkaa();*
> 
> *}*
> 
> *}*
> 
> *}*
> 
> *&lt;/SCRIPT&gt;";*
> 
>       *Page.RegisterStartupScript("ForceDefaultToScript", theScript);*
>     
>       *textControl.Attributes.Add("onkeydown", "fnTrapKD(" + defaultButton.ClientID + ",event)");*
> 
> *}*
> 
> *Tämä koodi rekisteröi annetun skriptin sivulle. Sitten se lisää tekstilaatikkoon ominaisuuden, joka tässä tapauksessa on AvainDown -tapahtuma, joka kutsuu fnTrapKD-toimintoa painikkeella ClientID (se on HTML-tunnus renderöidyssä HTML-muodossa) ja tapahtuman. Minun piti siirtää tapahtuma, koska Netscape/Mozilla-selain voi napata tämänkaltaisen tapahtuman, jos et syötä sitä funktioon. IE pääsee tapahtumaan asiakirjaobjektista, mutta haluamme jotain mukavaa ja ristiselainta yhteensopivaa.*
> 
> *Dokumentti.Kaikki tiedot kattavat IE:n. Dokumentti.getElementById kattaa Netscape 6+- ja Mozilla-selaimet. Dokumentti.layers jos lausunto toimii Netscape 4+ -selaimella.*
> 
> *Lisää nyt rivi koodia, joka yhdistää jokaisen haluamasi tekstilaatikon tietyllä viestipainikkeella. Esimerkiksi:*
> 
>       *SetDefaultButton(this, TextBox1, Button1);*
>     
>       *SetDefaultButton(this, TextBox2, Button2);*
>     
>       *SetDefaultButton(this, TextBox3, Button3);*
> 
> *Yleensä laitan sen sivulle.\_Load, koska Page.RekisteröidyssäStartupScript-menetelmässä ei oteta huomioon kaksoisskriptejä. Nyt on vain soitettava SetDefault-nappiin jokaisesta tekstilaatikko-lähetä-nappiyhteydestä.*
> 
> *Olen testannut tätä laajasti vielä, ja osa JavaScriptista voi olla tarpeetonta. Ja ottaen huomioon Netscape 4 -versioiden määrän (ja niiden viallisuuden), se ei luultavasti toimi kaikissa niissä. Mutta se toimii (tällä hetkellä). Ja ainakin yrittää Netscape 4+ ja IE 5+ kattaa 99 prosenttia sivustoni selaimista.*