如何在asp.net中调用JS函数

时间:2014-04-28 15:30:13

标签: c# javascript asp.net

我的问题是我想在TextBox属性上调用js函数" OnTextChanged",js函数应该检查TextBox中的文本是否正确并设置Button的可见性。

这是我的asp代码:

...
<head runat="server">
...
<script type="text/javascript" src="<%# Page.ResolveClientUrl("Verify.js") %>"></script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox ID="FirstTextBox" ClientIDMode="Static" runat="server" ></asp:TextBox>
        <asp:Button ID="AddButton" runat="server" Text="Add person" Height="23px" OnClick="AddButton_Click"/>
...
</form>
</body>

js(在另一个文件中):

function Valid()
{
    var textBox = '<%= FirstTextBox.ClientID %>';
    var acceptButton = '<%= AddButton.ClientID %>';
    var text= document.getElementById(textBox).value;
    var accept = document.getElementById(acceptButton);
    if(data correct)
    {
        do things..
    }
    else
    {
        accept.style.display = 'none';
    }
}

并在c#代码中为TextBox设置属性。

ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptInclude("Verify", "Verify.js");
this.FirstTextBox.Attributes.Add("OnTextChanged", "Valid()");

JS函数不执行,看起来程序甚至没有进入js函数。任何人都知道我做错了什么?谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

我认为这里有两个问题:

  1. 没有javascript事件OnTextChanged这应该更新为onchangeonkeypress,具体取决于您要查找的响应速度。
  2. 您的外部javascript值包含无法评估的代码块,与.NET一样强大 可能它不会随机解析您的资源以获取代码块并尝试理解它们 在当前的背景下。
  3. 鉴于您当前的设置,我认为最简单的方法是按如下方式更新您的代码:

    JS:

    function Valid(textboxId, btnId){
        var textBox = textboxId;
        var acceptButton = btnId;
        var text= document.getElementById(textBox).value;
        var accept = document.getElementById(acceptButton);
        if(data correct)
        {
            do things..
        }
        else
        {
            accept.style.display = 'none';
        }
    }
    

    C#:

    ClientScriptManager cs = Page.ClientScript;
    cs.RegisterClientScriptInclude("Verify", "Verify.js");
    this.FirstTextBox.Attributes.Add("onchange", string.Format("Valid('{0}', '{1}')",FirstTextBox.ClientID, AddButton.ClientID));
    

    希望有所帮助。

答案 1 :(得分:1)

您应该使用onchange而不是OnTextChanged这是服务器端事件。