未捕获的TypeError:无法在jquery validate中调用未定义的方法'addMethod'

时间:2013-09-23 11:15:35

标签: jquery jquery-validate

您好我正在使用jQuery JavaScript Library v1.10.2jQuery Validation Plugin 1.11.1并收到上述错误。 代码

$.validator.addMethod("fnType", function (value, element) {
    if (element.value == "-1") { return false; } else {return true;}
}, "Please select Type");

其余代码用于jquery验证。上面的代码位于$(document).ready内,位于$("#button").click内。

注意:我之前使用jQuery JavaScript Library v1.4.4并升级到这些版本以使用jquery validate。我从早上开始坚持这个。请帮忙/建议。

编辑: 这是完整的代码

$(document).ready(function () {
    OnPageLoad();

    $("#ctl00_MainContentHolder_SubmitButton").click(function () {
        ValidatePage();
        if ($("#aspnetForm").valid()) {
            if (FormValidation()) {
                __doPostBack("Submit", "");
            }
        }
    });
});

function ValidatePage() {
    $.validator.addMethod("fnType", function (value, element) {
        if (element.value == "-1") { return false; } else {return true;}
    }, "Please select Type");

    $("#aspnetForm").validate({
        ignore:":hidden",
        rules: 
        {
            <%=Type.UniqueID %>: { required: true, fnType:true },
        }, 
        messages: 
        {
            <%=Type.UniqueID %>:{ required: "Type is required" },
        },
        errorPlacement: function(error, element) {
           error.appendTo('#ctl00_MainContentHolder_errorLabelTop');
        },
        wrapper: 'li'
    });
}

在母版页中,我有相同的顺序

<script type="text/javascript" src="../Script/JQuery/jquery-1.10.2.js"></script>
<script type="text/javascript" src="../Script/JQuery/jquery.validate.js"></script>    
<script type="text/javascript" src="../Script/CustomScript/CustomScript.js"></script>

编辑:这是HTML代码

<table>
    <tr>
        <td colspan="2">
            <label id="errorLabelTop" runat="server" class="ResponseText"></label>
        </td>
    </tr>
    <tr>
        <td style="width:130px;">
            Scheme Type<span class="RedMainText" style="font-size:12px;"><sup>*</sup></span>
        </td>
        <td>
            <select id="schemeType" runat="server" class="InputText" >
            <option value="-1">--Select--</option>
            <option value="Home3">Home 3 Monthly</option>
            <option value="Home6">Home 6 Monthly</option>
            <option value="Practice3">Practice 3 Monthly</option>
            <option value="Practice6">Practice 6 Monthly</option>
            </select>
        </td>
    </tr>
</table>

2 个答案:

答案 0 :(得分:4)

您的代码:

rules: {
    <%=Type.UniqueID %>: { required: true, fnType:true },
}

您无法将规则分配给id的{​​{1}}。您必须仅使用input属性分配它们。此外,如果您希望在旧版本的IE中使用它,请删除任何尾随逗号。

name

<强> HTML

rules: {
    myField: {
        required: true,
        fnType: true 
    }
}

显示验证插件的演示无法与<input name="myField" ... 一起使用:http://jsfiddle.net/hmBjY/

演示,显示使用id的验证插件:http://jsfiddle.net/NKCg9/1/


另外,您的代码:

name

对于重复调用,这些方法不会进入函数或function ValidatePage() { $.validator.addMethod( .... $("#aspnetForm").validate({ .... 处理程序。插件会自动捕获click这些方法仅用于初始化,因此您在DOM ready事件处理程序中将它们称为一次 ...

click

答案 1 :(得分:-2)

显然我在打开和关闭一天之后发现了导致问题的原因。我的网页上有jquery Datepicker,而jquery文件是jquery-ui js/css v1.8.6,我正在使用v1.10.2。这导致了冲突,将jquery-ui升级为v1.10.3后,上述错误不再存在。这意味着代码中没有错误。另一个需要注意的重要事项是,name属性是jquery验证元素必须的。但是对于具有runat =“server”的元素,它们的id可以这种方式使用&lt;%= yourid.UniqueID% &GT;在jquery验证中。所有这些都发生在母版页和内容页案例中。

感谢您以评论和答案的形式提供的所有有用的贡献。