1

刚开始学习并在练习 jscript 时遇到这个问题

代码:

<script type="text/jscript" language="jscript">
    function MyClientFunction(sender, arguments) {
        var intValue = arguments.value;
        alert(arguments.value);
        if (intValue % 2 == 0) {
            arguments.IsValue = true;
        }
        else {
            alert("Use Even Numbers");
        }
    }
</script>

<asp:textbox ID="TextBox1" runat="server"></asp:textbox>
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="CustomValidator" ClientValidationFunction="MyClientFunction();" EnableClientScript="true"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button"></asp:Button>

单击“按钮”后显示错误:

“......错误:无法获取未定义或空引用的属性'值'......”

我不确定参数是如何传递的,对jscript函数的工作原理不是很熟悉

试过这个,没有错误:

var intValue = document.getElementById("TextBox1").value;
alert(intValue);

非常感谢..

4

4 回答 4

2

Don't pass this. You don't want to pass anything, you just want to give it the name of your function and the rest will be handled for you:

ClientValidationFunction="MyClientFunction" 

Refer to the example on this page.

Also make sure you're using the correct capitalization. It should be arguments.Value and arguments.IsValid.

于 2013-09-11T00:31:41.700 回答
1

你有几个问题。这是一个固定版本

<script>
    function MyClientFunction(sender, args) {
        var intValue = args.Value;
        alert(args.Value);
        if (intValue % 2 == 0) {
            args.IsValid = true;
        }
        else {
            args.IsValid = false;
        }
    }
</script>

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server" 
    ControlToValidate="TextBox1" ErrorMessage="Use Even Numbers" 
    ClientValidationFunction="MyClientFunction" EnableClientScript="true"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button"></asp:Button>

改变的事情清单

  • 在验证器上添加ControlToValidate属性,将值设置为您希望它验证的控件的 ID -TextBox1在这种情况下

  • 的值ClientValidationFunction应该只是一个 javascript 函数的名称,而不是对它的实际调用

  • 该函数采用两个您正确的参数。我找不到参数属性的定义。第二个参数Value(带有大写 V)是文本框输入,因为您已经正确关联了控件。

  • 在方法中设置IsValidtrue 或 false

  • 将错误消息移动到验证器属性而不是使用警报

另外我改为arguments因为args前者是javascript中的默认名称。

于 2013-09-11T00:37:48.740 回答
0

原因是因为 JavaScript 是区分大小写的语言。以下代码应该可以工作:

<script type="text/jscript" language="jscript">
    function MyClientFunction(sender, arguments) {
        var intValue = arguments.Value;
        alert(arguments.Value);
        if (intValue % 2 == 0) {
            arguments.IsValue = true;
        }
        else {
            alert("Use Even Numbers");
        }
    }
</script>

解释是,arguments是一个参数对象,它具有您所知道的两个属性(Value 和 IsValid),并且您引用的是属性“Value”和小写“v”。

您还需要将属性 ControlToValidate 添加到您的 CustomValidator:

ControlToValidate="TextBox1"

CustomValidator 的公共 ClientValidationFunction 属性只期望在您的情况下对您的函数有一个有效的全名引用,您可以只使用“MyClientFunction”而不使用函数调用“();” . 此外,所有 ASP.net 验证器都有一个名为 ValidationGroup 的公共属性,如果您有多个验证区域,它只是一个非常方便的标签。

于 2013-09-11T00:07:36.097 回答
0

调用客户端函数时,您没有传递任何参数。
因此,它声明的两个参数都是undefined.

当您在内联事件处理程序中调用它时,您可能希望将this其作为参数传递。

于 2013-09-10T21:17:56.137 回答