Non riesci a trovare asp: textbox in Javascript
-
25-09-2019 - |
Domanda
Sto cercando di aggiungere l'attributo onkeydown ad un asp: textbox. Per qualche motivo il mio codice non riesce a trovare la casella di testo che si trova all'interno di una LoginView.
sto facendo qualcosa di sbagliato?
<script type="text/javascript">
window.onload = function() {
UserName.Attributes.Add("onKeyDown", "KeyDownHandler('" + btn.ClientID + "')");
Password.Attributes.Add("onKeyDown", "KeyDownHandler('" + btn.ClientID + "')");
}
function KeyDownHandler(btn)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
document.getElementById(btn).click();
}
}
</script>
Soluzione
Il codice sta cercando di aggiungere gli attributi gestore eventi nello script client. Ciò deve avvenire in un blocco di codice lato server. Qualcosa di simile:
<script runat="server">
UserName.Attributes.Add("onKeyDown", "KeyDownHandler('" + btn.ClientID + "')");
Password.Attributes.Add("onKeyDown", "KeyDownHandler('" + btn.ClientID + "')");
</script>
<script type="text/javascript">
function KeyDownHandler(btn)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
document.getElementById(btn).click();
}
}
</script>
In alternativa, se si dispone di una pagina code-behind, mettere l'attribute.Add chiama in caso PreRender.
Altri suggerimenti
Nel file aspx, aggiungere lo script del server che legherà caselle di testo username e la password di un gestore di eventi client chiamato KeyDownHandler:
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
TextBox userNameControl = FindControl("UserName") as TextBox;
TextBox passwordControl = FindControl("Password") as TextBox;
if (userNameControl != null)
userNameControl.Attributes.Add("onKeyDown", "KeyDownHandler(this)");
if (passwordControl != null)
passwordControl.Attributes.Add("onKeyDown", "KeyDownHandler(this)");
}
</script>
Poi dichiarare script client del gestore di eventi:
<script type="text/javascript">
function KeyDownHandler(domButton)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
domButton.click();
}
}
</script>
Prova il cablaggio del gestore di eventi parametri in questo modo:
<script type="text/javascript">
window.onload = function() {
UserName.Attributes.Add("onKeyDown", "KeyDownHandler(this)");
Password.Attributes.Add("onKeyDown", "KeyDownHandler(this)");
}
function KeyDownHandler(domButton)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
domButton.click();
}
}
</script>