MVC Добавление методов в jquery.validate.unobtrusive.js
Недавно у меня возник вопрос о обработке проверки флажка на стороне клиента в проекте MVC. Этот вопрос был успешно ответил, но поднял еще один запрос.
Чтобы моя проверка флажка работала, мне нужно было добавить следующие биты javascript непосредственно в jquery.validate.unobtrusive.js:
$jQval.addMethod("mustbetrue", function (value, element, param) {
// check if dependency is met
if (!this.depend(param, element))
return "dependency-mismatch";
return element.checked;
});
adapters.add("mustbetrue", function (options) {
setValidationValues(options, "mustbetrue", true);
});
это отлично поработало, но я недоволен необходимостью изменять этот файл на случай, если Microsoft или плагины проверки правильности обновят файл в будущем. Если я еще не работаю над проектом, этот файл может быть перезаписан без того, чтобы люди не осознавали, что они настроены.
Итак, имея в виду, я попытался добавить это в внешний файл javascript:
$.validator.addMethod("mustbetrue", function (value, element, param) {
// check if dependency is met
if (!this.depend(param, element))
return "dependency-mismatch";
return element.checked;
});
$.validator.unobtrusive.adapters.add("mustbetrue", function (options) {
setValidationValues(options, "mustbetrue", true);
});
К сожалению, теперь клиентская сторона script на моих флажках не запускается. Может ли кто-нибудь увидеть, что я делаю неправильно?
Заранее спасибо
S
Ответы
Ответ 1
Наркоман,
Чем больше я смотрю на это, тем больше я качаю головой (на себя).
После дальнейшего рассмотрения метод Дарина будет работать, если вы добавите одну строку на свою страницу script:
<script type="text/javascript">
$.validator.unobtrusive.adapters.addBool("mustbetrue", "required");
$.validator.unobtrusive.parse();
</script>
Всякий раз, когда вы вносите изменения (например, добавляете новый адаптер), вы должны повторно проанализировать ненавязчивые атрибуты проверки. Поскольку последнее действие в jquery.validate.unobtrusive.js
- это разбор атрибутов, а адаптер добавляется после разбора, повторный парсинг решает эту проблему.
counsellorben
P.S. Это решает вашу проблему, но все еще оставляет нерешенным вопрос о том, как добавить другие настраиваемые валидаторы, которые не используют встроенные методы из jquery.validate.js
без изменения jquery.validate.unobtrusive.js
.
P.P.S. Я нашел ответ для добавления пользовательских методов проверки. Чтобы добавить собственные методы проверки валидации без изменения jquery.validate.unobtrusive.js
, вам нужно "заимствовать" часть своего кода, чтобы добавить на свою страницу script. Добавление пользовательского метода выглядит следующим образом:
<script type="text/javascript">
var $jQval = $.validator,
adapters,
data_validation = "unobtrusiveValidation";
function setValidationValues(options, ruleName, value) {
options.rules[ruleName] = value;
if (options.message) {
options.messages[ruleName] = options.message;
}
}
$jQval.addMethod("mustbetrue", function (value, element, param) {
// check if dependency is met
if (!this.depend(param, element))
return "dependency-mismatch";
return element.checked;
});
$.validator.unobtrusive.adapters.add("mustbetrue", function (options) {
setValidationValues(options, "mustbetrue", true);
});
$jQval.unobtrusive.parse();
</script>
Ответ 2
Ненавязчивая проверка не дает мне ничего, кроме горя.
На очень простой тестовой странице это работает:
$(document).ready(function () {
jQuery.validator.unobtrusive.adapters.add(
'mustbetrue', ['properties'], function (options) {
options.rules['mustbetrue'] = options.params;
options.messages['mustbetrue'] = options.message;
}
);
jQuery.validator.addMethod('mustbetrue', function (value, element, params) {
// check if dependency is met
if (!this.depend(param, element)) {
return "dependency-mismatch";
}
switch (element.type) {
case "checkbox":
return element.checked;
break;
case "hidden":
return (value == 'true' || value == 'True');
break;
default:
alert('type = ' + element.type);
return true;
break;
}
});
});
Однако, когда я перемещаю этот код в более сложную форму, он внезапно перестает работать, и я понятия не имею, почему и нет времени, чтобы вникать в ненавязчивый код, чтобы попытаться выяснить.
Решение advsellorben работает в моей более сложной форме.
Если кто-нибудь может указать мне сайт, который подробно объясняет, как правильно добавить пользовательский валидатор к ненавязчивой проверке, я буду навсегда великодушным. Каждый сайт, который я посещаю, имеет другое решение.
Ответ 3
У меня нет проблем с добавлением этого кода в внешний файл javascript, который я похитил из Этот сайт
// Custom validator for checkboxs
jQuery.validator.unobtrusive.adapters.add("brequired", function (options) {
//bool-required for checkboxes
if (options.element.tagName.toUpperCase() == "INPUT" &&
options.element.type.toUpperCase() == "CHECKBOX")
{
options.rules["required"] = true;
if (options.message) {
options.messages["required"] = options.message;
}
}
});
Вы уверены, что поставили script ПОСЛЕ сценариев jquery на своей странице? Шахта является последней в списке.