In Asp.Net 2.0 tra le tante novità c'è la possibilità di settare il focus di un determinato controllo da codice:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SetFocus(btnFocus)
End Sub
Se si analizza il markup della pagina renderizzata, si può notare una serie di blocchi script che vengono innietati da Asp.Net(WebTestPort è il nome della mia web folder):
<script src="/WebTestPort/WebResource.axd?d=JOzeK6_XXttVr6DVBJy-NA2&t=633240927615853308" type="text/javascript"></script>
inoltre prima della chiusura del tag form viene aggiunto un altro script per richiamare la funzione WebForm_AutoFocus:
<script type="text/javascript">
<!--
WebForm_AutoFocus('btnFocus');// -->
</script>
All'interno del file WebResource.axd troviamo la funzione javascript WebForm_AutoFocus che ci permette di settare il focus del controllo:
function WebForm_AutoFocus(focusId) {
var targetControl;
if (__nonMSDOMBrowser) {
targetControl = document.getElementById(focusId);
}
else {
targetControl = document.all[focusId];
}
var focused = targetControl;
if (targetControl && (!WebForm_CanFocus(targetControl)) ) {
focused = WebForm_FindFirstFocusableChild(targetControl);
}
if (focused) {
try {
focused.focus();
if (__nonMSDOMBrowser) {
focused.scrollIntoView(false);
}
if (window.__smartNav) {
window.__smartNav.ae = focused.id;
}
}
catch (e) {
}
}
}
Volendo possiamo implementare qualcosa di simile anche in Asp.Net 1.1:
private void AutoFocus( Control control)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append( "<script language='javascript'>{var element=document.getElementById('");
sb.Append( control.ClientID);
sb.Append( "');if( element != null)element.focus();}</script>");
Page.RegisterStartupScript( "AutoFocus", sb.ToString());
}
0 commenti:
Post a Comment