У меня есть ASP.NET Core, сетка Angular (2) и всплывающее окно, и я пытаюсь выполнить пользовательскую проверку более чем в одном поле.
Если я попытаюсь реализовать две версии пользовательской проверки, показанные ниже, то вторая проверка не будет запущена, пока первая не пройдет , что нормально, но затем второе сообщение проверки не появится в всплывающее окно.
schema: {
model: {
id: "contactID",
fields: {
contactID: { type: "number" },
lastName: { type: "string" },
firstName: { type: "string" },
name: { type: "string" },
jobTitle: { type: "string" },
jobTitleID: {
type: "number",
validation: {
jobTitleIdValidation: function (input, params) {
if (input.is("[name='jobTitleID']")) {
var $jobTitleId = kendo.jQuery('#jobTitleID');
var jobTitleIdValue = $jobTitleId.data("kendoComboBox").value();
if (parseInt(jobTitleIdValue, 10) === 0 || !jobTitleIdValue) {
$jobTitleId.attr('data-jobTitleIdValidation-msg', 'Job title is required');
return false;
} else {
return true;
}
}
}
}
},
office: {
type: "string"
},
officeID: {
type: "number",
validation: {
officeIdValidation: function (input, params) {
if (input.is("[name='officeID']")) {
var $officeId = kendo.jQuery('#officeID');
var officeIdValue = $officeId.data("kendoComboBox").value();
if (parseInt(officeIdValue, 10) === 0 || !officeIdValue) {
$officeId.attr('data-officeIdValidation-msg', 'Office is required');
return false;
} else {
return true;
}
} else {
return true; // for any other input
}
}
}
},
Фрагмент кода шаблона:
editable: {
mode: "popup",
template:
`<div id="details" _ngcontent-c2>
<div><label for="firstName">First Name</label>
<input id="firstName" data-bind="value: firstName" /></div>
<div><label for="lastName">Last Name</label>
<input id="lastName" data-bind="value: lastName" /></div>
<div><label for="email">Email</label>
<input id="email" data-bind="value: email" /></div>
<div><label for="phone">Phone</label>
<input id="phone" data-bind="value: phone" /></div>
<div><label for="mobile">Mobile</label>
<input id="mobile" data-bind="value: mobile" /></div>
<div><label for="jobTitleID">Job Title</label>
<input id="jobTitleID" name="jobTitleID" data-bind="value: jobTitleID" /></div>
<div class="validator-msg"><span data-for="jobTitleID" class="k-invalid-msg"></span></div>
<div><label for="officeID">Office</label>
<input id="officeID" name="officeID" data-bind="value: officeID" /></div>
<div class="validator-msg"><span data-for="officeID" class="k-invalid-msg"></span></div>
</div>
Если, однако, я пытаюсь выполнить все проверки в одном настраиваемом правиле проверки (что, как представляется, ожидается), и с использованием одного диапазона сообщений проверки (в рамках jobTitleId) он не отображает сообщение для officeID после предоставления jobTitleID , Код здесь:
jobTitleID: {
type: "number",
validation: {
customValidation: function (input, params) {
var $jobTitleId = kendo.jQuery('#jobTitleID');
if (input.is("[name='jobTitleID']")) {
var jobTitleIdValue = $jobTitleId.data("kendoComboBox").value();
if (parseInt(jobTitleIdValue, 10) === 0 || !jobTitleIdValue) {
$jobTitleId.attr('data-customValidation-msg', 'Job title is required');
return false;
} else {
return true;
}
} else if (input.is("[name='officeID']")) {
var officeIdValue = kendo.jQuery('#officeID').data("kendoComboBox").value();
if (parseInt(officeIdValue, 10) === 0 || !officeIdValue) {
$jobTitleId.attr('data-customValidation-msg', 'Office is required');
return false;
} else {
return true;
}
} else {
return true; // for any other input
}
}
}
Как мне заставить это вести себя правильно? Я подозреваю, что это как-то связано с return true
в конце (?)
Обратите внимание, что я не хочу просто использовать required: true attribute
, потому что отображается значение по умолчанию 0, и мне также нужно будет проверить комбинацию полей.