Javascript - метод правил плагина jQuery Validate не работает

У меня есть простой файл javascript, которому просто нужно запустить метод правил. К сожалению, по какой-то причине он не работает. Я знаю, что мой пользовательский файл javascript отображается нормально, поскольку маскировка ввода работает нормально. Я дважды проверил, есть ли у меня скрипт проверки jquery, поэтому я не уверен, в чем моя проблема. Проект представляет собой простой веб-сайт mvc, написанный на платформе Visual Studio Enterprise 2015. Данная страница на веб-сайте - это страница EditInfo, для вашей справки.

Вот BundleConfig.cs, добавляющий пакет проверки.

public static void RegisterBundles(BundleCollection bundles)
    {
     //More bundles obviously are added
      bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate*"));
    }

Далее находится файл макета, в котором отображается сценарий.

@Scripts.Render("~/bundles/jqueryval")

Далее, вот 2 пользовательских файла javascript, объявленных в представлении.

    <script src = "@Url.Content("~/Scripts/EditInfo.js")" type = "text/javascript"></script>
    <script src = "@Url.Content("~/Scripts/app.js")" type = "text/javascript"></script>

Затем вот пользовательский файл javascript EditInfo, который использует метод проверки. Это весь файл за вычетом 3 строк, касающихся маскировки ввода, которые работают нормально.

$(document).ready(function () {
var counter = 0;
var $CreateProfilevalidator = {};


$CreateProfilevalidator = $("#frmEditInfo").validate({
    rules: {
        personalEmail:/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,15}|[0-9]{1,3})(\]?)$/i,
        otherEmail: /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,15}|[0-9]{1,3})(\]?)$/i,
        workCell: /^\(?\d{3}\)?\s?-?\d{3}\s?-?\d{4}$/,
        personalCell: /^\(?\d{3}\)?\s?-?\d{3}\s?-?\d{4}$/,
        otherPhone: /^\(?\d{3}\)?\s?-?\d{3}\s?-?\d{4}$/
    },
    messages: {
        personalEmail: "Invalid Email",
        otherEmail: "Invalid Email",
        workCell: "Invalid Phone Number",
        personalCell: "Invalid Phone Number",
        otherPhone: "Invalid Phone Number"
    },
    errorPlacement: function (error, element) {
        errorPlacementValidator(error, element);
    },
    highlight: function (element, errorClass, validClass) {
        counter++;
        highlightValidator(element, errorClass, validClass, counter);
    },
    unhighlight: function (element, errorClass, validClass) {
        counter++;
        unhighlightValidator(element, errorClass, validClass, counter);
    }

});
});

Наконец, вот файл app.js, который содержит 3 метода проверки, используемые в моем файле javascript.

function errorPlacementValidator(error, element) {
if (element.is(":radio")) {
    error.appendTo(element.closest("[class*='col-sm-']"));
}
else if (element.parents('.selectric-wrapper').size() > 0) {
    console.info('selectric error');
    error.appendTo(element.closest('[class* = "col-sm-"]'));
}
else {
    error.appendTo(element.parent());
}
}

function highlightValidator(element, errorClass, validClass, counter) {
var $parent = $(element).parent();

// remove icon and success spans if any
$parent.find("span.form-control-feedback, span.sr-only").remove();

// add ".error" class to input element
$(element).addClass(errorClass).removeClass(validClass);

// add Bootstrap ".has-error" class to parent div.form-group element
$(element).closest(".form-group").removeClass("has-success").addClass("has-error has-feedback");

// need to have it check to see if span already added
// only add for non radio or non select input elements
if (!$(element).is(":radio, select, textarea, :checkbox, .btn") && !$(element).hasClass("datepicker")) {
    counter++;

    var $spans = $parent.find("span");

    // check to make sure error spans are not already in form-group before attempting to append after input
    if ($spans.length == 0) {
        // add span element with ".glyphicon" ".glyphicon-remove" ".form-control-feedback" classes after input
        $(element).after("<span class='glyphicon glyphicon-remove form-control-feedback' aria-hidden='true'></span>");
        $(element).after("<span id='inputError" + counter + "Status'" + " class='sr-only'>(error)</span>");
    }
}
}

function unhighlightValidator(element, errorClass, validClass, counter) {
var $parent = $(element).parent();

// remove icon and success spans if any
$parent.find("span.form-control-feedback, span.sr-only").remove();

// remove ".error" class from input element
$(element).removeClass(errorClass).addClass(validClass);

if (!$(element).is(":radio, select, textarea, :checkbox, .btn") && !$(element).hasClass("datepicker")) {
    // // remove Bootstrap ".has-error" class from parent div.form-group element
    $(element).closest(".form-group").removeClass("has-error").addClass("has-success has-feedback");

    var $spans = $parent.find("span");

    if ($spans.length == 0 && !$(element).is("select")) {
        $(element).after("<span class='glyphicon glyphicon-ok form-control-feedback' aria-hidden='true'></span>");
        $(element).after("<span id='inputSuccess" + counter + "Status'" + " class='sr-only'>(error)</span>");
    }
} else if ($(element).parents('.selectric-wrapper').size() > 0) {
    $(element).closest(".form-group").removeClass("has-error").addClass("has-success has-feedback");
}
}

Я погуглил и провел свое исследование, но причина все еще ускользает от меня. Если я упустил важную информацию, прошу прощения. Но сайт, который я пишу, все равно не выдаст ошибку, если я укажу неверно отформатированный адрес электронной почты или номер телефона короче требуемого. Обновлено: формулировка

Вы пробовали читать документацию или смотреть другие примеры здесь, на SO? Могу вам сказать, что я никогда не видел такой попытки.

Sparky 16.04.2018 16:45

@Sparky Что значит «попытаться сделать это»? Что ненормального в моей попытке? (не имел в виду нахальство) Я думал, что следую обычной процедуре.

Josh 16.04.2018 16:47

Вы полностью упускаете сами правила. См. Ответ ниже.

Sparky 16.04.2018 17:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
435
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Объект rules создается с использованием списка пар key: value, разделенных запятыми, которые представляют имена полей с их методами. Внутри части методов находится еще один разделенный запятыми список пар key: value, которые представляют имя метода и его параметр. В вашей попытке полностью отсутствуют действующие правила (методы).

$('#yourform').validate({
    rules: {  
        fieldname1: {        // <- field NAME
            required: true,  // <- rule (method) : parameter
            phoneUS: true    // <- rule (method) : parameter
        },
        fieldname2: {        // <- field NAME
            required: true,  // <- rule (method) : parameter
            email: true      // <- rule (method) : parameter
            .....

Если вы хотите проверить регулярное выражение, вам нужно использовать метод pattern, который является частью файл additional-methods.js.

$CreateProfilevalidator = $("#frmEditInfo").validate({
    rules: {
        personalEmail: {
            pattern: /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,15}|[0-9]{1,3})(\]?)$/i
        },
        otherEmail: {
            pattern: /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,15}|[0-9]{1,3})(\]?)$/i
        } 
        ....

Поскольку ваш список правил отсутствует, я также не знаю, нужно ли вам поле required и т. д. Но вам также нужно будет перечислить эти правила.

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

Я не понимал, что для использования регулярного выражения требуется метод шаблона, спасибо. И нет {} для каждого правила: я швырял вещи в стену и надеялся, что что-то застрянет. Раньше у меня все было правильно. Отображается ли файл additional-methods.js автоматически в пакете проверки? Или мне нужно самому объявить этот конкретный файл сценария? Последний вопрос, нужно ли мне «required: true»? Мне не нужно, чтобы они требовались, это внутренний сайт (в США), а регулярное выражение и маскировка ввода должны сохранять телефонные номера соответствующей длины.

Josh 16.04.2018 17:06

Этот ответ не относится к ASP, о чем вы никогда не упоминали в вопросе. Однако я полагаю, что вам нужно будет отдельно включить additional-methods.js. В противном случае скопируйте метод из этого файла и вставьте его где-нибудь в свой собственный JavaScript.

Sparky 16.04.2018 17:08

Правило required не имеет ничего общего с длиной. Это просто делает поле обязательным для заполнения. Если это не обязательно, значит, оно вам не нужно. Однако, IMO, просто используйте правила телефона и электронной почты, встроенные в плагин.

Sparky 16.04.2018 17:09

Спасибо. И прошу прощения, забыл включить в шапку ASP.Net. Да, я использую ASP.Net.

Josh 16.04.2018 17:10

У меня плохая формулировка, я имел в виду, что мне не нужно правило длины, но не уточнил. Еще раз спасибо за помощь.

Josh 16.04.2018 17:11

Другие вопросы по теме