Код Jquery не работает при развертывании на серверах
На странице есть разные разделы(ASP.net MVC) с теми же элементами управления(например, телефон,электронная почта). Я хочу, чтобы следующее сообщение проверки отображалось по-разному в сводке проверки(с именем раздела) и рядом с отдельными текстовыми полями(без имени раздела)
Это сообщение проверки, указанное в модели
[Required(ErrorMessage = "Chief Executive - |Name is required")] [Required(ErrorMessage = "Medical Director - |Name is required")]
Код для замены символа '|' в jquery.validate.unobtrusive.js есть
function onError(error, inputElement) { // 'this' is the form element var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"), replaceAttrValue = container.attr("data-valmsg-replace"), replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null; container.removeClass("field-validation-valid").addClass("field-validation-error"); error.data("unobtrusiveContainer", container); if (replace) { container.empty(); error.removeClass("input-validation-error").appendTo(container); } else { error.hide(); } error.text(error.text().substr(error.text().indexOf("|") + 1)); } function onErrors(event, validator) { // 'this' is the form element var container = $(this).find("[data-valmsg-summary=true]"), list = container.find("ul"); if (list && list.length && validator.errorList.length) { list.empty(); container.addClass("validation-summary-errors").removeClass("validation-summary-valid"); $.each(validator.errorList, function () { $("<li />").html(this.message.replace('|', '')).appendTo(list); }); } }
Символ трубы заменяется пробелом и отображается по желанию в локальном хосте. Но когда код развертывается на серверах, я получаю одно и то же сообщение проверки (с именами разделов), отображаемое как в сводке проверки, так и рядом с текстовыми полями.
Я готов предоставить и другой код.
У меня тоже есть это в web.config
<appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
Что я уже пробовал:
код jquery не работает при развертывании на серверах
MadMyche
Что означает "не работает при развертывании"? Он что-нибудь делает? Выбрасывать ошибку? Что показывает консоль разработчика браузеров?
Member 10549164
Он не бросает никаких ошибок. Но приведенный выше код jquery для замены символа '|' на '' не работает. Сообщение "Chief Executive - |Name is required" отображается в сводке проверки, а также рядом с текстовым полем.
ZurdoDev
Проверьте консоль в вашем браузере на наличие ошибок. Также проверьте, чтобы убедиться, что jquery.js заряжен.
Richard Deeming
Похоже, что часть вашего кода была потеряна, когда вы его вставили. Например, эта линия полностью искорежена:
var container = $(this).find(".name) + "']"),
На линии отсутствует селектор:
var container = $(this).find("")
И еще один пропавший без вести на линии:
$("").html(this.message.replace('|', '')).appendTo(list);
Member 10549164
Привет Ричард,
Пожалуйста, найдите код в jquery.validate.unobtrusive.js файл.
\\\
(функция ($) {
var $jQval = $.validator,
адаптеры,
data_validation = "ненавязчивая валидация";
setValidationValues функции(параметры, имяправила, значение) {
варианты.правила[имяправила] = значение;
если (параметры.сообщение) {
варианты.сообщений[имяправила] = вариантов.сообщение;
}
}
функция splitAndTrim(значение) {
возвращаемое значение.заменить(/^\S+С|Ь\+$/г, "").Сплит (/и\S*,\х*/г);
}
функция escapeAttributeValue(значение) {
// Как уже упоминалось выше http://api.jquery.com/category/selectors/
возвращаемое значение.заменить(/([!"#$%&усилитель;'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
}
функция getModelPrefix(fieldName) {
return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
}
функция appendModelPrefix(значение, префикс) {
if (value.indexOf("*.") === 0) {
value = value.replace("*.", префикс);
}
значение;
}
функция onError(error, inputElement) { // 'this' - это элемент формы
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
= контейнер replaceAttrValue.м("данные-valmsg-заменить"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;
контейнер.removeClass("поле-проверка-действительно").добавление("поле-проверка-ошибка");
error.data("unobtrusiveContainer", контейнер);
если (заменить) {
контейнер.пустые();
error.removeClass("input-validation-error").appendTo(контейнер);
}
еще {
ошибка.скрыть();
}
ошибка.текст(ошибка.текст().функцию substr(ошибка.текст().метод indexOf("|") + 1));
}
функция onErrors(event, validator) { //'this' - это элемент формы
var container = $(this).find("[data-valmsg-summary=true]"),
список = контейнер.найти("ул");
если (АМПП список&;&амп; список.длина и усилитель; & валидатор.errorList.длина) {
список.пустые();
контейнер.добавление("проверка-резюме-ошибки").removeClass("проверка-резюме-действует");
$.each(validator.errorList, функция () {
$("").html(this.message.replace('|', ")).appendTo(список);
});
}
}
функция onSuccess(error) { // 'this' - это элемент формы
var container = error.data("unobtrusiveContainer"),
= контейнер replaceAttrValue.м("данные-valmsg-заменить"),
заменить = replaceAttrValue ? $.parseJSON(replaceAttrValue) : нуль;
если (контейнер) {
контейнер.добавление("поле-проверка-действительно").removeClass("поле-проверка-ошибка");
error.removeData("unobtrusiveContainer");
если (заменить) {
контейнер.пустые();
}
}
}
\\\
Richard Deeming
Сайт все же сумел проглотить селектор на линии:
$("").html(this.message.replace('|', '')).appendTo(list);
Я предположил, что он соответствует оригинальному селектору:
$("<li />")
Member 10549164
Да, спасибо, то, что вы предположили, верно.. Я пытаюсь снова вставить эту строку сюда
$("").html(this.message.replace('|', ")).appendTo(список);
Richard Deeming
Это случилось снова. :)
Вы либо должны HTML-кодировать текст (<
вместо <
, >
вместо >
), или поставить <pre>...</pre>
бирки вокруг него.
Member 10549164
По какой-то причине метка исчезает в строке.
Мой вопрос снова..не могли бы вы сообщить мне, почему символ ' | ' () в сообщении проверки) не заменяется при развертывании на серверах. Он правильно заменяется при запуске в локальном хосте.
Richard Deeming
Я предполагаю, что либо вы еще не обновились jquery.validate.unobtrusive.js
на сервере или что версия на сервере фактически загружается jquery.validate.unobtrusive.min.js
, или версия скрипта из CDN.
Если он использует CDN, то вы не сможете его изменить.
Если он загружается jquery.validate.unobtrusive.min.js
, то вам нужно минимизировать вашу обновленную версию файла.
Member 10549164
Спасибо. Я проверю на сервере и обновлю, какая версия скрипта загружена на сервер.
Member 10549164
Огромное спасибо Ричарду, что в файле min не было обновления.
Я хочу, чтобы вы знали, что происходит на сервере.
Сборка отправила оба файла на сервер. По умолчанию он попытался загрузить файл min, который не имел модификации. Когда я удалил файл min из решения на Dev, код работает отлично. Я удивлен, что локально наша машина принимает обычный файл вместо минимального файла.
Поэтому локально он принимал обычный файл а на сервере его загружал с min.js..
Еще раз большое спасибо. Я обновлю файл min.
Member 10549164
Привет Ричард,
Могу ли я, пожалуйста, получить min.js код следования jquery.validate.unobtrusive.js код
1) ошибка.текст(ошибка.текст().функцию substr(ошибка.текст().метод indexOf("|") + 1));
потому что я не нахожу эквивалентной функции .text в intellisense in min.js файл.