Дата регистрации в Magento дата рождения в одном поле


Я хочу, чтобы в моей форме регистрации клиентов поле даты рождения было в одном поле. Теперь это в 3 областях. Так что у меня есть

<div class="input-box customer-dob">
    <input type="text" id="<?php echo $this->getFieldId('dob') ?>" name="<?php echo $this->getFieldName('dob') ?>"
           class="input-text validation-custom required-entry"/>
</div>

Но проверка не работает. У вас есть какие-нибудь идеи?

Author: Felix, 2014-06-06

4 answers

В вашем коде вместо validate-custom укажите validate-date в качестве класса для поля ввода.

Сценарий проверки для этого можно найти в js/prototype/validation.js строка 503

'validate-date', 'Please enter a valid date.', function(v) {
                var test = new Date(v);
                return Validation.get('IsEmpty').test(v) || !isNaN(test);
            }],
 2
Author: Rojan Shrestha, 2014-06-06 09:25:58

Отличный вопрос!

Для этого вам не нужен jQuery. Вы можете сделать это с помощью встроенного средства проверки форм Magento. Сначала javascript для настройки формы для проверки должен быть помещен в ваш шаблон формы:

<script type="text/javascript">
  var myForm= new VarienForm('[your form id]', true);
</script>

Теперь подготовьте поля формы , добавив соответствующие классы css.

Не может быть числа больше, чем 9.99

<input type="text" class="required-entry validate-digits-range digits-range-0-9.99"/>

В полях нет пробелов

<input type="text" class="required-entry validate-alphanum"/>

Вот и все! Для большего конкретные случаи использования вам придется добавить пользовательские правила проверки:

Только числовые поля должны содержать .00 для подтверждения от 1 до 1.00

Validation.add('validate-float','Input must be in the form of 0.00',function(v){
    return Validation.get('IsEmpty').test(v) || (!/\./.test(v));
});

, который затем проверяется следующим образом:

<input type="text" class="required-entry validate-float"/>

Буквы должны быть прописными

Это похоже, регулярное выражение должно проверять диапазон прописных букв:

Validation.add('validate-uppercase','Input must be in uppercase',function(v){
    return Validation.get('IsEmpty').test(v) || (!/^[A-Z]+$/.test(v));
});

И используется как:

<input type="text" class="required-entry validate-uppercase"/>

Пожалуйста, перейдите по этой ссылке, надеюсь, это поможет вам:

http://inchoo.net/ecommerce/magento/magento-frontend/magento-form-field-ajax-validation/
 1
Author: Ami Kamboj, 2014-06-06 09:20:59

Решение очень простое – взломайте свой

/js/varien/js.js

Файл и измените это:

var error = false, day = parseInt(this.day.value) || 0, month = parseInt(this.month.value) || 0, year = parseInt(this.year.value) || 0;

, который идет о line 437, к этому:

var error = false, day = parseInt(this.day.value, 10) || 0, month = parseInt(this.month.value, 10) || 0, year = parseInt(this.year.value, 10) || 0;

И это все!

 1
Author: TBI Infotech, 2014-06-06 09:22:24

Чего не делает validate-date, так это того, что он также принимает футуристическую дату.

Я создал проверку класса (используя только прототип) посмотрите, наслаждайтесь кодированием

<input type="hidden" name="dob" class="validate-dob" id="dob" current-date="<?php echo date('m/d/Y')?>"/>


Validation.add('validate-dob','Please enter a valid birthday',function(value,el){`enter preformatted text here`
                        if(value != ''){
                          var pattern =/^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$/;
                          var month = value.substring(0,2);
                          var day = value.substring(3,5);
                          var year = value.substring(6,10);
                          var current_date = el.readAttribute('current-date');
                          var current_month = current_date.substring(0,2);
                          var current_day = current_date.substring(3,5);
                          var current_year = current_date.substring(6,10);
                          var dob = new Date(year, month - 1, day);
                          var current_date = new Date(current_year, current_month - 1, current_day);
                          if(!pattern.test(value) || (current_date <= dob)){
                              return false;
                          }
                        }
                        return true;
                     });
 1
Author: Yash Patadia, 2016-10-07 10:17:13