Op een ASP.NET-webform staan onder andere een aantal textboxen en een button. Aan een textbox txtDebiteuren is een TextChanged_event gekoppeld. Als dit event wordt uitgevoert wordt onder andere via een clientside-javascriptje gezorgd dat er een bepaald textboxje de focus krijgt. In het OnClick_event van de button staat hetzelfde javascriptje, maar dan voor een andere textbox.
Als op de button geklikt wordt terwijl ook de text in het textvakje gewijzigd is worden twee events uitgevoerd. Eerst het TextChanged_event van de textbox en daarna het OnClick_event van de button.
Je zou verwachten dat textboxje 'txtNaam' nu netjes de focus krijgt maar ik krijg een script-error waarin staat dat txtDebiteuren de focus niet kan krijgen (logisch want hij is niet enabled). Dit wil naar mijn idee dus zeggen dat SetFocus(txtNaam) als het ware overgeslagen wordt, alleen het javascriptje dat als eerste wordt uitgevoerd wordt in de pagina gerendered. Kan ik de volgorde van het uitvoeren van de events omdraaien of is er een andere manier om te zorgen dat txtNaam netjes de focus krijgt in deze situatie?
Als op de button geklikt wordt terwijl ook de text in het textvakje gewijzigd is worden twee events uitgevoerd. Eerst het TextChanged_event van de textbox en daarna het OnClick_event van de button.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| Private Sub SetFocus(ByVal ctrl As Control) Dim focusScript As String = "<script language='javascript'>" & _ "document.getElementById('" + ctrl.ClientID & _ "').focus();</script>" Page.RegisterStartupScript("FocusScript", focusScript) End Sub Private Sub txtDebiteuren_TextChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles txtDebiteuren.TextChanged SetFocus(txtDebiteuren) End Sub Private Sub cmdNieuw_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles cmdNieuw.Click txtDebiteuren.Enabled = True SetFocus(txtNaam) End Sub |
Je zou verwachten dat textboxje 'txtNaam' nu netjes de focus krijgt maar ik krijg een script-error waarin staat dat txtDebiteuren de focus niet kan krijgen (logisch want hij is niet enabled). Dit wil naar mijn idee dus zeggen dat SetFocus(txtNaam) als het ware overgeslagen wordt, alleen het javascriptje dat als eerste wordt uitgevoerd wordt in de pagina gerendered. Kan ik de volgorde van het uitvoeren van de events omdraaien of is er een andere manier om te zorgen dat txtNaam netjes de focus krijgt in deze situatie?