Проверка всплывающего окна kendoGrid, несколько полей - PullRequest
0 голосов
/ 14 января 2019

У меня есть 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, и мне также нужно будет проверить комбинацию полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...