【问题标题】:Can't find asp:textbox in Javascript在 Javascript 中找不到 asp:textbox
【发布时间】:2011-03-01 16:04:27
【问题描述】:

我正在尝试将 onkeydown 属性添加到 asp:textbox。由于某种原因,我的代码找不到登录视图内的文本框。

我做错了吗?

<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>

【问题讨论】:

    标签: javascript textbox enter onkeydown


    【解决方案1】:

    您的代码正在尝试在客户端脚本中添加事件处理程序属性。这需要在服务器端代码块中发生。比如:

    <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> 
    

    或者,如果您有代码隐藏页面,请将属性放在 PreRender 事件中。添加调用。

    【讨论】:

    • 我从中得到了错误。用户名和密码需要声明
    • 你的aspx文件中有&lt;asp:textbox ID="UserName" runat="server"&gt;&lt;asp:textbox ID="Password" runat="server"&gt;吗?
    • 这是一个母版页。我在登录视图中有用户名和密码文本框。我是否必须指定登录视图?
    • 我该怎么做? loginview#UserName?
    • 您也可以在发出的最终 html 上使用查看源代码,找出那些用户/传递 元素的渲染 ID,并使用 javascript 将事件直接连接到 onload 事件中,根据您的原始示例。下面是一个使用 javascript 连接事件的简短示例:v3.thewatchmakerproject.com/journal/168/…
    【解决方案2】:

    在您的 aspx 文件中,添加将现有用户名和密码文本框绑定到名为 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>
    

    然后声明事件处理程序的客户端脚本:

    <script type="text/javascript">
    function KeyDownHandler(domButton) 
    { 
        if (event.keyCode == 13) 
        { 
            event.returnValue=false;     
            event.cancel = true; 
            domButton.click(); 
        } 
    } 
    </script>
    

    【讨论】:

    • 它说“文本框”需要声明
    • 更新了服务器端脚本以包含 Page_Load() 声明。
    • 这绝对行不通。您同时在一个脚本中使用 VB 和 Javascript 控件。
    • 其实是C#(服务器)和JavaScript(客户端),肯定不是同时出现的。当然,我假设您的页面包含Language="C#" 指令,因此&lt;script runat="server"&gt; 不需要指定它所使用的语言。祝你好运。
    • 不。这只会给我大约 10-12 个错误。我将发布一个新问题,在 VB 中寻求答案。
    【解决方案3】:

    尝试以这种方式连接事件处理程序参数:

    <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>
    

    【讨论】:

    • 我试过这个,我似乎得到了错误:消息:'用户名'未定义行:18 字符:5 代码:0 URI:localhost:1972/TiltonSite
    • 这也是:消息:对象不支持此属性或方法行:28 字符:9 代码:0 URI:localhost:1972/TiltonSite
    • 您的 Attributes.Add() 调用必须在 &lt;script runat="server"&gt; 标记中,并且 KeyDownHandler() 必须在客户端脚本部分(即 &lt;script type="text/javascript"&gt;
    猜你喜欢
    • 2018-10-15
    • 2018-06-04
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多