Как мне использовать addmethod () в плагине проверки jquery - PullRequest
0 голосов
/ 06 мая 2011

хорошо, я занимался этим в течение 5 дней и получил код 0, nill, zippo и nada, добавленный в мой проект универа !!(9-го числа: /)

ПОЖАЛУЙСТА, может кто-нибудь дать мне ПОЛНЫЙ код использования для того, что у меня есть ниже?Помните, что я полный noob, поэтому, пожалуйста, включите материал OBVIOUSE, который обычно пропускается.

(Чтобы смягчить любые моральные проблемы с предоставлением кода для проектов универа, нужно было просто помнить, что нужно использовать, а не как это делать.не имеет значения.)

Вот что у меня есть (просто тестовая страница, чтобы доказать себе, что это не было чем-то странным с остальной частью моего кода)

<%@ 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': объект имеет значение null или не определено

И это указывает на эту строку в файле 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, и бог знает, сколько расширителей !!

Буду признателен за ваш вклад в будущие проекты.

1 Ответ

3 голосов
/ 06 мая 2011

Первое, что я заметил, это то, что вы пытаетесь получить доступ к форме, когда она еще не загружена.Вы должны поместить свой код в событие готовности DOM, чтобы он ожидал загрузки всего 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]); (чтобы получить первый параметр).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...