将 Javascript 插入 ASP.Net 页

Inserting Javascript into ASP.Net page

我有密码

<script type="text/javascript">
    function validateLength(objectSource, args) {
        var a = document.getElementById('<%=txtUserName.ClientID%>').value;
        args.IsValid = (a.length >= 5 && a.length <= 10);
    }
</script>

我的 ASP.NET 页面中有。

这很好用。将验证文本框以确保它在一定长度之间。

但是我正在尝试整理我的页面代码。所以决定把这个小函数放到一个单独的 javascript 文件中。

<script type="text/javascript" src="Scripts/MyJS.js">
</script>

页面加载正常,然后在验证出现时失败。我猜它无法访问文本框(txtUserName)。

我的问题是:如何让它工作?

我收到错误消息

0x800a138f - Microsoft JScript runtime error: Unable to get value of the property 'value': object is null or undefined

当 javascript 触发时

您页面上下文中的 <%=txtUserName.ClientID%> 运行。这在单独的 .js 文件中不起作用。 单独的 .js 文件不会 运行 任何 asp.net 代码。 你可以这样做:

JS文件:

function validateLength(objectSource, args) {
    var a = document.getElementById(window.myValidatorId).value;
    args.IsValid = (a.length >= 5 && a.length <= 10);
}

ASP

<script type="text/javascript">
    window.myValidatorId = '<%=txtUserName.ClientID%>';
</script>

或者从页面上隐藏的输入字段中读取 ID。

当您包含 javascript 文件时,代码部分

<%=txtUserName.ClientID%>

未呈现。

您必须通过两种方式更改 javascript 函数 修复控件名称

<script type="text/javascript">
    function validateLength(objectSource, args) {
        var a = document.getElementById('txtUserName').value;
        args.IsValid = (a.length >= 5 && a.length <= 10);
    }
</script>

或添加参数

<script type="text/javascript">
    function validateLength(objectSource, args, nameOfControl) {
        var a = document.getElementById(nameOfControl).value;
        args.IsValid = (a.length >= 5 && a.length <= 10);
    }
</script>

然后您可以从您的页面调用该函数,参数 nameOfControl 可以是

<%=txtUserName.ClientID%>

例如

validateLength(objectSource, args, <%=txtUserName.ClientID%>)