ASP.Net文本框失去焦点事件

16
我有一个文本框,需要在用户从文本框移开(onBlur事件)时验证它的值(如果文本框的值为50,则在lblShowMsg中显示消息)。我似乎无法得到正确的语法。
我在我的页面加载事件上有这段代码:
protected void Page_Load(object sender, EventArgs e)
{
    txtCategory.Attributes.Add("onblur", "validate()"); 

}

但是我似乎无法正确编写JavaScript代码。有什么建议吗?


2
为什么你要在代码中添加onblur属性而不是在标记中添加呢? - awright18
3个回答

9
在代码后台:(VB.NET)
在页面加载事件中。
txtAccountNumber.Attributes["onBlur"] = "IsAccNumberValid(" & txtAccountNumber.ClientID & ")";

在这里,txtAccountNumber是标记页中文本框的ID。你需要传递文本框的ClientID,因为JavaScript是客户端而不是服务器端。现在,在标记页(.aspx)的头部分有以下Javascript代码:

<script type="text/javascript">                     
function IsAccNumberValid(txtAccountNumber) {                                             
    if (txtAccountNumber.value.length < 6) {    
                      alert(txtAccountNumber.value);
            }    
        }    
</script>

3
这是 C# 版本:ddlCompanies.Attributes["onBlur"] = "AddNewCompany1(" + ddlCompanies.ClientID + ")";这段代码的意思是在 ddlCompanies 控件失去焦点时,调用名为 AddNewCompany1 的方法,并将 ddlCompanies 控件的客户端 ID 作为参数传递给该方法。 - Danimal111

5

您的Page_Load中的实际代码是这样吗?您需要使用控件的名称,而不是TextBox的类型名称。例如,您可以尝试:

 textBox1.Attributes.Add("onblur", "validate();");

其中"textBox1"是你在标记中分配给textBox的ID。

此外,从Javascript来看,文本框的ID一旦被呈现到页面上可能会发生变化。最好将控件传递到验证函数中:

function validate(_this)
{
    if (_this.value == "50")
        // then set the ID of the label.  
}

然后您可以像这样设置属性:

textBox1.Attributes.Add("onblur", "validate(this);");

最后,如果你在使用Javascript编程时,我强烈推荐使用JQuery库,它会让你的生活变得轻松10倍。


抱歉,那是我的笔误。txtBox的ID是txtCategory。 - LearningCSharp
当我按照您上面展示的代码运行它(没有使用JQuery),我会收到一个错误信息:“Microsoft JScript运行时错误:'document.form1.lblShowMsg'为空或不是对象”。 - LearningCSharp
问题的一部分在于你想要使用的标签很可能已经被重命名为其他名称。可以使用IE中的开发人员工具或Firefox中的FireBug来查找表单上标签的实际ID。这两个工具都可以让你浏览DOM。一旦找到它,就可以使用document.getElementById("此处元素的ID")获取该元素,然后可以在Javascript中设置其innerHTML属性。 - David Morton
我使用了开发者工具,可以看到该标签具有与lblFSCText相同的ID值;我认为在这样一种先进的语言中,验证onblur的基本功能不应该如此复杂。 - LearningCSharp
仍然出现了“document.getElementByID(...)为null或不是对象”的错误,我知道你的意思是该对象被重命名为另一个ID,但在开发工具中,它确实具有相同的ID。 - LearningCSharp
显示剩余2条评论

2

这是有效的。

Textbox1.Attributes.Add("onblur","javascript:alert('aaa');");

确保函数位于页面的脚本部分。


我的页面

<script type="text/javascript">
    function Validate() {

        alert('validate');

    }

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="Textbox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

代码后台

public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Textbox1.Attributes.Add("onblur","Validate();");
        }
    }

不需要警报;需要在标签中显示消息;(lblShowMsg.visible = true) - LearningCSharp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接