У меня есть простой файл 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");
}
}
Я погуглил и провел свое исследование, но причина все еще ускользает от меня. Если я упустил важную информацию, прошу прощения. Но сайт, который я пишу, все равно не выдаст ошибку, если я укажу неверно отформатированный адрес электронной почты или номер телефона короче требуемого. Обновлено: формулировка
@Sparky Что значит «попытаться сделать это»? Что ненормального в моей попытке? (не имел в виду нахальство) Я думал, что следую обычной процедуре.
Вы полностью упускаете сами правила. См. Ответ ниже.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Объект 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»? Мне не нужно, чтобы они требовались, это внутренний сайт (в США), а регулярное выражение и маскировка ввода должны сохранять телефонные номера соответствующей длины.
Этот ответ не относится к ASP, о чем вы никогда не упоминали в вопросе. Однако я полагаю, что вам нужно будет отдельно включить additional-methods.js. В противном случае скопируйте метод из этого файла и вставьте его где-нибудь в свой собственный JavaScript.
Правило required не имеет ничего общего с длиной. Это просто делает поле обязательным для заполнения. Если это не обязательно, значит, оно вам не нужно. Однако, IMO, просто используйте правила телефона и электронной почты, встроенные в плагин.
Спасибо. И прошу прощения, забыл включить в шапку ASP.Net. Да, я использую ASP.Net.
У меня плохая формулировка, я имел в виду, что мне не нужно правило длины, но не уточнил. Еще раз спасибо за помощь.
Вы пробовали читать документацию или смотреть другие примеры здесь, на SO? Могу вам сказать, что я никогда не видел такой попытки.