Петрушка. js сосредоточиться на проверенном div на ошибку - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно заполнить как минимум одно из трех полей в моей форме. Поэтому я использовал проверку петрушки для элемента div, охватывающего эти три поля. Работает очень хорошо, единственная проблема в том, что при ошибке он не фокусируется, как обычные входные данные.

Вот еще несколько подробностей c (это синтаксис haml):

#phone-fields.parsley-group-validate{data:{'parsley-one-child-required' => "mobile_phone|home_phone|work_phone",parsley_validate_if_empty:'true'
  = f.input :mobile_phone, as: :phone
  = f.input :home_phone, as: :phone
  = f.input :work_phone, as: :phone

, затем в моем javascript файле я добавляю пользовательскую oneChildRequired проверку

      Parsley.addValidator('oneChildRequired', {
        requirementType: 'string', //expect format of string t be input ids separated by '|' e.g. "mobile_phone|home_phone|work_phone" not sure how to allow varying number of requirements so this will suffice
        validateString: function(_value, requirement, instance) {
          var multiSelector = "#enrolment_form_"+requirement.replace(/\|/g, ', #enrolment_form_');// gives multi selector like '"#enrolment_form_mobile_phone, #enrolment_form_home_phone, #enrolment_form_work_phone"'
          var $inputs = instance.$element.find(multiSelector);
          var valid = false;
          $inputs.each(function(i){
            if($(this).val()){
              valid = true; // one input has a value
              return false; //break out of the loop
            }
          });
          // no input has the target value (requirement2)
          return valid;
        }
      });

1 Ответ

1 голос
/ 22 апреля 2020

Я нашел в исходном коде return this._focusedField.focus();

.focus(), я думаю, работает только на элементах ввода.

Поэтому, чтобы исправить это, я заменил его на

      if(this._focusedField.is(':input')){
        return this._focusedField.focus();
      } else {
        return this._focusedField.attr("tabindex",-1).focus();
      }

блок else вызовет фокус на элементе div

Интересно, есть ли лучший способ сделать это.

...