# Echt mooie cross-browser methode van het doen van de 'DefaultButtons' ding - zodat als je op enter, de juiste knop 'klikt'

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

<!-- category -- mostlylucidcouk, Imported, ASP.NET, JavaScript, UI Automation, Event Handling -->
Dit is een van de belangrijkste UI problemen die in wezen veroorzaakt worden door ASP.NET's 'one form'-regel, omdat [DarrellCity in Ontario Canada](http://dotnetjunkies.com/WebLog/darrell.norton/) wijst erop dat er een aantal oplossingen die er zijn, maar geen van hen echt het hele probleem oplossen (d.w.z., voor alle browsers), goed nu is er een geweldige oplossing - van [Darrell Nortons blog](http://dotnetjunkies.com/WebLog/darrell.norton/) ([link](http://dotnetjunkies.com/WebLog/darrell.norton/archive/2004/03/03/8374.aspx)): (herproduceerd hier omdat ik het nooit meer zal vinden anders ...)

> ## [*Standaardknoppen verzenden wanneer de gebruiker op de Enter-toets drukt - eindelijk!*](http://dotnetjunkies.com/WebLog/darrell.norton/archive/2004/03/03/8374.aspx)
> 
> *Een van de moeilijkste dingen in web ontwikkeling is het krijgen van een bepaalde knop om in te dienen als je meer dan een knop op de pagina. Andy Smith, van* [*Metabuilders*](http://www.metabuilders.com/) *roem, heeft een die werkt voor laat-model browsers.*
> 
> *Vanwege vrij strikte eisen van de klant voor een publieke e-commerce site, Ik had iets nodig dat verder terug ging in de geschiedenis van de browser. Ik vond een code monster van* [*Janus Kamp Hansen*](http://www.kamp-hansen.dk/pages/showdoc.asp?id=28&menuid=21&menuid=18) *Dat werkte alleen voor IE.*
> 
> *Ik breidde het uit om te werken met Mozilla en Netscape 6+, dan voegde wat meer code om het te krijgen om te werken met de meeste Netscape 4+ browsers. Dan heb ik de prestaties een beetje aangepast, en dat is het! Een snelle, makkelijk te gebruiken code knipsel om specifieke submit knoppen te dwingen om te branden van ontwikkelaar-bepaald tekstvakken.*
> 
> *Kopieer eerst deze methode naar een gemakkelijk toegankelijke plaats:*
> 
> *publieke leegte SetDefaultButton(Page pagina, TextBox textControl, Knop standaardButton)*
> 
> *{*
> 
>       *// 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;SCRIPT language=""javascript""&gt;*
> 
> *functie fnTrapKD(btn, event){*
> 
> *indien (document.all) {*
> 
> *if (event.keyCode == 13){*
> 
> *event.returnValue=false;*
> 
> *event.cancel = true;*
> 
> *btn.click();*
> 
> *}*
> 
> *}*
> 
> *anders indien (document.getElementById) (*
> 
> *als (event.what == 13){*
> 
> *event.returnValue=false;*
> 
> *event.cancel = true;*
> 
> *btn.click();*
> 
> *}*
> 
> *}*
> 
> *anders if(document.layers){*
> 
> *if(event.what == 13){*
> 
> *event.returnValue=false;*
> 
> *event.cancel = true;*
> 
> *btn.click();*
> 
> *}*
> 
> *}*
> 
> *}*
> 
> *&lt;SCHRIFT&gt;";*
> 
>       *Page.RegisterStartupScript("ForceDefaultToScript", theScript);*
>     
>       *textControl.Attributes.Add("onkeydown", "fnTrapKD(" + defaultButton.ClientID + ",event)");*
> 
> *}*
> 
> *Deze code registreert het gegeven script met de pagina. Vervolgens voegt het een attribuut toe aan het tekstvak, wat in dit geval een onKeyDown-evenement is dat de fnTrapKD-functie aanroept met de knoppen clientID (het HTML-id in de weergegeven HTML) en het evenement. Ik moest het evenement doorgeven omdat Netscape/Mozilla-browsers dit soort evenementen niet kunnen vangen tenzij je het doorgeeft aan de functie. IE kan toegang krijgen tot het evenement vanuit het documentobject, maar we willen iets leuks en cross-browser compatibel.*
> 
> *Het document.all if statement heeft betrekking op IE. Het document.getElementById heeft betrekking op Netscape 6+ en Mozilla browsers. Het document.layers als statement werkt met Netscape 4+.*
> 
> *Voeg nu een regel code toe die elke tekstvak die u wilt koppelen aan een bepaalde submit-knop. Bijvoorbeeld:*
> 
>       *SetDefaultButton(this, TextBox1, Button1);*
>     
>       *SetDefaultButton(this, TextBox2, Button2);*
>     
>       *SetDefaultButton(this, TextBox3, Button3);*
> 
> *Meestal zet ik dat op de pagina\_Laad, sinds de pagina.RegisterStartupScript methode zal dubbele scripts negeren. Nu is het gewoon een kwestie van het maken van een oproep naar SetDefaultButton voor elke tekstvak-ingediende knop associatie.*
> 
> *Ik heb nog niet getest dit uitgebreid nog, en sommige van de JavaScript kan onnodig zijn. En gezien het aantal Netscape 4 versies (en hun bugginess), het werkt waarschijnlijk niet op alle van hen. Maar het werkt (voor nu). En in ieder geval het maken van een poging op Netscape 4+ en IE 5+ zal 99% van mijn site*