如何在jquery验证插件中使用addmethod()

时间:2011-05-06 18:51:14

标签: javascript jquery asp.net validation

好吧,我已经在这5天了,并且在我的uni项目中添加了0,nill,zippo和nada代码! (截至9日:/)

请问有人可以给我下面的完整利用率代码吗?记住我是一个完整的菜鸟,所以请包含通常遗漏的OBVIOUSE东西。

(为了给uni项目提供代码而减轻任何道德问题只是在知道要利用什么,而不是如何编码是无关紧要的。)

继承我拥有的东西(只是一个测试页面向我自己证明与我的其余代码没什么奇怪的事情)

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="jquery-1.4.2.js" type="text/javascript"></script>
    <script src="jquery.validate.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">


            $.validator.addMethod(
    "regex",
     function (value, element, regexp) {
         var check = false;
         var re = new RegExp(regexp);
         return this.optional(element) || re.test(value);
     },
        "Please check your input.");

        $('#<%= txtStones.ClientID %>').rules("add", { regex: "/\d\d?/" })

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

多数民众赞成,我的整个代码......这就是我得到的

Microsoft JScript运行时错误:无法获取属性“form”的值:object为null或undefined

它指向jquery.validate.js文件中的这一行

var settings = $ .data(element.form,'validator')。settings;

rules: function(command, argument) {
        var element = this[0];

        if (command) {
            var settings = $.data(element.form, 'validator').settings;
            var staticRules = settings.rules;
            var existingRules = $.validator.staticRules(element);
            switch(command) {
            case "add":
                $.extend(existingRules, $.validator.normalizeRule(argument));
                staticRules[element.name] = existingRules;
                if (argument.messages)
                    settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
                break;
            case "remove":
                if (!argument) {
                    delete staticRules[element.name];
                    return existingRules;
                }
                var filtered = {};
                $.each(argument.split(/\s/), function(index, method) {
                    filtered[method] = existingRules[method];
                    delete existingRules[method];
                });
                return filtered;
            }
        }

这就是一切。我知道它可能是一个完全没有被我做过的驴子愚蠢的事情,但是我真的真的需要让它发挥作用。

我非常感谢您的意见。

修改

好吧我没时间所以我将不得不去做我真正不想做的事情。我将拥有大约200个asp.net验证控制工具,上帝知道有多少扩展器!!

我仍然感谢您对furure项目的投入。

1 个答案:

答案 0 :(得分:3)

我注意到的第一件事是你在尚未加载表单时尝试访问该表单。您必须将代码放入DOM ready事件中,以便在开始运行之前等待整个DOM加载。基本上,当您的代码运行时,<form>尚不存在,这就是您收到该错误的原因。尝试更改:

$('#<%= txtStones.ClientID %>').rules("add", { regex: "/\d\d?/" })

要:

$(function() {
    //This function will be called only when the DOM is ready. At this point,
    // your <form> will exist.
    $('#<%= txtStones.ClientID %>').rules("add", { regex: "/\d\d?/" })
});

看看是否有帮助。

<小时/> 的修改
此外,根据this,回调函数的第三个参数似乎是一个数组(请参阅链接页面上的示例)。因此,您可能需要将var re = new RegExp(regexp);更改为var re = new RegExp(regexp[0]);(以获取第一个参数)。