Пользовательский метод проверки jQuery никогда не срабатывал - PullRequest
2 голосов
/ 19 октября 2011

Я пытаюсь создать пользовательский метод проверки для моего поля даты и времени, и я следую примеру здесь: Сбой диапазона дат проверки Jquery и здесь: Проверить, что дата окончания больше началадата с jQuery

Ниже приводится моя форма (в частичном представлении mvc 3 бритвы):

@using (Html.BeginForm("CreateFood", "Stock", FormMethod.Post, new { id = "formData" }))
{
       @Html.ValidationSummary(false, "Opps. Please correct the mistakes")
       <div class="editor-label">
           Storage Date
       </div>
       <div class="editor-field">
          @Html.EditorFor(model => model.StorageDate, new { @class = "storedate" })
          @Html.ValidationMessageFor(model => model.StorageDate)
       </div>

       <div class="editor-label">
          Expiry Date
       </div>
       <div class="editor-field">
         @Html.EditorFor(model => model.ExpiryDate, new { @class = "expirydate" })
         @Html.ValidationMessageFor(model => model.ExpiryDate)
       </div>
 }

И сценарий:

jQuery.validator.addMethod("dateRange", function () {
        var date1 = new Date(jQuery(".expirydate").val());
        alert(date1);
        var date2 = new Date(jQuery(".storedate").val());
        alert(date2);
        alert(date1 < date2);
        return (date1 < date2);
    }, "Please check your dates. The start date must be before the end date.");

$createdialog.dialog("option", "buttons", {
        "Cancel": function () {
            $createdialog.dialog('close');
        },
        "Submit": function () {

            // Validate the form before ask for cabinet
            var frm = $('#formData');

            var validator = frm.validate({
                rules: {
                    "ExpiryDate": { dateRange: true }
                }
            });
            if (frm.valid()) {
                 submitForm();
            }

Вопрос:

  1. Я не совсем уверен в синтаксисе и о том, что я должен указать в «ExpiryDate» (это селектор? Или это имя поля формы?): Var validator = frm.validate ({rules: {"ExpiryDate": {dateRange: true}}

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

(PS: я использую DatePicker для обоих полей даты с определенным форматом:

  $('.storedate').datepicker({ dateFormat: 'D, dd M yy' });
  $('.expirydate').datepicker({ dateFormat: 'D, dd M yy' });

)

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

Цените любые отзывы ... TХэнкс ...});

Ответы [ 2 ]

0 голосов
/ 14 апреля 2015

Прежде всего, я порекомендую вам библиотеку http://momentjs.com/ для работы с датами и ее проверками.

В моем случае проверка пользовательских правил не выполнялась, потому что .NETMVC автоматически настраивает проверку формы.Поэтому мне пришлось удалить эту конфигурацию перед применением моей (чтобы иметь возможность использовать пользовательские методы пользовательского интерфейса Kendo, ...), и тогда все работало нормально.

Вот пример кода Javascript:

var errorPlaceholder = $("<div></div>");

function initializeFormValidator() {
    jQuery.validator.addMethod("year", function(value, element, options) {
        return (new Date().getFullYear()) >= parseInt(value, 10);
    });

    jQuery.validator.addMethod("greater20", function(value, element, options) {
        return (($(element).data("kendoDropDownList").value() == "1") && (parseFloat($(options).val()) >= 20.0));
    });

    $.data($("#myFormId")[ 0 ], "validator", null); //Remove previous configuration
    $("#myFormId").validate({
        focusInvalid: true,
        ignore: "",
        onkeyup: false,
        onfocusout: false,
        errorElement: "div",
        errorPlacement: function(error, element) {
            error.appendTo(errorPlaceholder);
        }
    });
}

function validateForm() {
        var ok = $("#myFormId").valid();
        if(!ok) {
            Utils.ShowAlert("Invalid form", errorPlaceholder.html(), BootstrapDialog.TYPE_WARNING);
        }

        return ok;
    }

И образец разметки для одного входа;)

<input data-msg-year="The construction year must be lower than the current year" data-rule-year="true" id="CARACTERISTICAS_GENERALES_antigue_cons" max="2100" min="1700" name="CARACTERISTICAS_GENERALES.antigue_cons" step="1" type="text" value="1700" data-role="numerictextbox" class="k-input error"/>
0 голосов
/ 19 октября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...