Все поля обязательны к заполнению ошибка

В дополнении PublicPost проставляю обязательные поля и при их заполнении все равно не дает сохранить черновик или опубликовать пост. Заполняется только если везде снять «*» обязательные поля

Здравствуйте.

Для начала обновите плагин до последней версии и проверьте работу на актуальной версии

Обновила, все равно пишет не все поля заполнены и при этом ничего не подсвечивает. Все поля заполнены

3s06@mail.ru сказал(а)
и при этом ничего не подсвечивает

какой браузер и его версия?

Последняя версия Google Chrome 83.0.4103.116

Нужны доступы с ролью автора — иначе мы не видим форму публикации.

Также прикрепите скриншот настроек дополнения публикации

я поправила настройки, сейчас должны увидеть

Добрый день.
Откройте файл /wp-content/plugins/wp-recall/assets/js/core.js
на строке 855 найдете

if ( !chekObject.isValid( field ) ) {

сразу после этой строки вставьте

console.log(field);

сообщите как сделаете это

Спасибо за репорт, ошибку удалось повторить и устранить, обновите плагин до версии 16.18.22, там эта проблема должна быть решена.

Ни для кого не секрет, что онлайн-формы могут стать серьёзным испытанием для пользователей. Особенно когда они выглядят как список полей для ввода без каких-либо подсказок. Однако мы, как разработчики, можем значительно облегчить жизнь посетителям наших сайтов.

Используем CSS

В CSS существует четыре специальных псевдокласса, применимых к полям формы: :valid (валидное поле), :invalid (невалидное), :required (обязательное) и :optional (необязательное). Их можно использовать, чтобы добавлять некоторые — хотя и весьма ограниченные — подсказки пользователям, заполняющим форму.

Используя :valid и :invalid, мы можем показать пользователю, правильно ли заполнено поле по мере ввода.

input:valid {
  border-color: green;
}

input:invalid {
  border-color: red;
}

Стилизация псевдоклассов :valid и :invalid

Стилизация псевдоклассов : valid и : invalid

Однако с этим способом связана одна проблема: стили применяются до того, как пользователь начнёт работу с формой. Поля, обязательные для заполнения, сразу подсветятся нам как :invalid, а необязательные — как :valid. Это значит, что пользователь, даже не приступив к заполнению формы, может сразу же получить негативную обратную связь. Не очень-то хорошо.

Стилизация состояний :required и :optional сама по себе не особо полезна, поскольку эта информация обычно указывается в подписях к полям формы. Однако мы можем объединить эти состояния с псевдоклассами :valid / :invalid и стилизовать их комбинации. Например, мы хотим показывать лишь положительный результат, когда валидно обязательное к заполнению поле.

input:required:valid {
  border-color: green;
}

Стилизация по :valid и :required

Стилизация по : valid и : required

Используем JavaScript

JavaScript даёт намного больше возможностей для улучшения работы пользователей с формами. Давайте рассмотрим в качестве примера три числовых поля, у каждого из которых установлен минимум в 10, максимум в 100 и шаг в 10 единиц.

<form>
  <label>
    Number Input 1
   <input type="number" min="10" max="100" step="10">
  </label>

  <label>
    Number Input 2
   <input type="number" min="10" max="100" step="10">
  </label>

  <label>
    Number Input 3
   <input type="number" min="10" max="100" step="10">
  </label>

  <input type="submit">
</form>

Устанавливая атрибуты minmax и step, мы можем быть уверены в правильности значения только тогда, когда пользователь использует специальные контролы числового поля. Но что мешает пользователю ввести вручную некорректные данные? Вот что произойдёт, если он вставит 112 и 123 в три поля и отправит форму:

Стандартный тултип валидации

Стандартный тултип валидации

В результате всё, что получит пользователь — это сообщение об ошибке для первого поля. Кроме того, в этом сообщении будет указано лишь одно несоответствие из двух требуемых. Такое поведение можно исправить, изменяя показываемые валидатором сообщения.

Добавляем несколько сообщений об ошибках в один тултип

Валидируя поля, браузер проверяет их по определённому списку потенциальных ошибок. В каждом поле содержится специальный объект validity, включающий в себя список булевых значений, характеризующих ту или иную проверку на валидность. Например, вот такой validity-объект будет у поля, когда пользователь введёт в него 1:

input.validity = {
  valid: false // Поле валидно
  customError: false // Установленно специальное сообщение ошибки
  patternMismatch: false // Значение не удовлетворяет шаблону, установленному в атрибуте pattern
  rangeOverflow: false // Значение превосходит атрибут max
  rangeUnderflow: true // Значение меньше атрибута min
  stepMismatch: true // Значение не соответствует указаному шагу
  tooLong: false // Значение слишком длинное
  tooShort: false // Значение слишком короткое
  typeMismatch: false // Значение не соответствует указаному атрибуту type
  valueMissing: false // Отсутствует обязательное значение
};

Примечание переводчика: Слово «mismatch» переводится как «несоответствие». Поэтому в значениях patternMismatchstepMismatch и typeMismatch обратная логика: true — значение не удовлетворяет атрибуту, false — удовлетворяет.

По умолчанию браузер отобразит лишь одну ошибку. Что мы можем сделать, так это проверить все эти значения самостоятельно и, если найдутся ошибки, сохранить их. Как только мы сохраним все ошибки для одного поля, мы можем отобразить весь их список в виде специального сообщения об ошибке при помощи функции setCustomValidity().

function CustomValidation() { }

CustomValidation.prototype = {
  // Установим пустой массив сообщений об ошибках
  invalidities: [],

  // Метод, проверяющий валидность
  checkValidity: function(input) {

    var validity = input.validity;

    if (validity.patternMismatch) {
      this.addInvalidity('This is the wrong pattern for this field');
    }

    if (validity.rangeOverflow) {
      var max = getAttributeValue(input, 'max');
      this.addInvalidity('The maximum value should be ' + max);
    }

    if (validity.rangeUnderflow) {
      var min = getAttributeValue(input, 'min');
      this.addInvalidity('The minimum value should be ' + min);
    }

    if (validity.stepMismatch) {
      var step = getAttributeValue(input, 'step');
      this.addInvalidity('This number needs to be a multiple of ' + step);
    }

    // И остальные проверки валидности...
  },

  // Добавляем сообщение об ошибке в массив ошибок
  addInvalidity: function(message) {
    this.invalidities.push(message);
  },

  // Получаем общий текст сообщений об ошибках
  getInvalidities: function() {
    return this.invalidities.join('. \n');
  }
};

// Добавляем обработчик клика на кнопку отправки формы
submit.addEventListener('click', function(e) {
  // Пройдёмся по всем полям
  for (var i = 0; i < inputs.length; i++) {

    var input = inputs[i];

    // Проверим валидность поля, используя встроенную в JavaScript функцию checkValidity()
    if (input.checkValidity() == false) {

      var inputCustomValidation = new CustomValidation(); // Создадим объект CustomValidation
      inputCustomValidation.checkValidity(input); // Выявим ошибки
      var customValidityMessage = inputCustomValidation.getInvalidities(); // Получим все сообщения об ошибках
      input.setCustomValidity(customValidityMessage); // Установим специальное сообщение об ошибке

    } // закончился if
  } // закончился цикл
});

Теперь при попытке отправить форму мы увидим вот это:

Отображаем несколько ошибок в одном тултипе

Стало лучше, поскольку теперь будут показываться все сообщения об ошибках, связанные с конкретным полем. Однако другая проблема всё ещё не решена: ошибки по-прежнему показываются лишь для первого поля.

Это ограничение валидации, устанавливаемое браузером. Чтобы его побороть, нам нужно пойти другим путём.

Показываем все ошибки для всех полей

Вместо того, чтобы использовать встроенный тултип, мы можем добавлять сообщения об ошибках напрямую в DOM. Таким образом, все ошибки будут выводиться рядом с соответствующим полем.

Этого можно добиться какой-то парой дополнительных строчек в нашем коде:

CustomValidation.prototype.getInvaliditiesForHTML = function() {
  return this.invalidities.join('. <br>');
}

// Добавляем обработчик клика на кнопку отправки формы
submit.addEventListener('click', function(e) {
  // Пройдёмся по всем полям
  for (var i = 0; i < inputs.length; i++) {

    var input = inputs[i];

    // Проверим валидность поля, используя встроенную в JavaScript функцию checkValidity()
    if (input.checkValidity() == false) {

      var inputCustomValidation = new CustomValidation(); // Создадим объект CustomValidation
      inputCustomValidation.checkValidity(input); // Выявим ошибки
      var customValidityMessage = inputCustomValidation.getInvalidities(); // Получим все сообщения об ошибках
      input.setCustomValidity(customValidityMessage); // Установим специальное сообщение об ошибке

      // Добавим ошибки в документ
      var customValidityMessageForHTML = inputCustomValidation.getInvaliditiesForHTML();
      input.insertAdjacentHTML('afterend', '<p class="error-message">' + customValidityMessageForHTML + '</p>')
      stopSubmit = true;

    } // закончился if
  } // закончился цикл

  if (stopSubmit) {
    e.preventDefault();
  }
});

Вот что происходит при клике на submit теперь:

Отображаем все ошибки для всех полей в DOM

Отображаем все ошибки для всех полей в DOM

Используем нестандартные проверки валидности

Иногда встроенной в браузер валидации бывает недостаточно. Нам может понадобиться, чтобы вводимые данные удовлетворяли некоторым дополнительным правилам. Например, чтобы в текстовом поле требовалось указать особые символы.

Так как мы уже проверяем все возможные ошибки вручную в нашей функции CustomValidation.prototype.checkValidity, мы можем просто-напросто добавить туда ещё несколько проверок.

CustomValidation.prototype.checkValidity = function(input) {

  // Тут идут встроенные проверки валидности

  // А тут специальные
  if (!input.value.match(/[a-z]/g)) {
    this.addInvalidity('At least 1 lowercase letter is required');
  }

  if (!input.value.match(/[A-Z]/g)) {
    this.addInvalidity('At least 1 uppercase letter is required');
  }
};

Валидация в реальном времени

Хотя текущий способ выглядит намного лучше, он тоже не без изъянов. Наихудший из недочётов заключается в том, что пользователь не сможет увидеть никаких сообщений, пока не нажмёт на кнопку отправки формы. Было бы гораздо лучше, если бы валидация поля происходила сразу же при его заполнении. Можно выделить три правила для того, чтобы с формой было удобно работать:

  1. Требования для каждого поля чётко видны до того, как пользователь начал печатать.
  2. Как только пользователь начинает вводить данные, соблюдая требования, он сразу видит индикатор успешного заполнения поля или подсказки, если есть ошибки.
  3. Нужно отображать сообщения об ошибках таким образом, чтобы пользователь не мог отправить некорректно заполненную форму.

Пример валидации в реально времени

Пример валидации в реально времени

Если вы хотите попробовать свои силы (и даже сделать получше), вы можете воспользоваться вот этим шаблоном.


«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

ТелеграмПодкастБесплатные учебники

А. Г.

Евгений!

Вас никогда не удивляло, что в гайдлайнах ни одной операционной системы не упомянуты индикаторы обязательных полей? Все «настольные» приложения умудряются существовать, ничего не подозревая об этой проблеме.

Разделение на обязательные и необязательные поля пришло в интернет вместе с маркетингом. В формы регистрации стали пихать поля, которые якобы помогают составлять портрет пользователя и рассчитывать хитроумную статистику. Как только первая форма на каком-нибудь Хотмейле ушла за второй экран (что немыслимо для диалоговых окон «настольных» приложений), стало ясно, что без красных звёздочек * рядом с обязательными полями нормальному человеку через анкету не прорваться.

В итоге звёздочки стали удобным ориентиром для быстрого ввода бессмыслицы типа sdfgh или 1111. Тогда хитроумные программисты придумали валидацию, или проверку заполнения, чтобы например в поле ввода электронной почты непременно потребовать собаку и правильно прописанные домены. Помехи пользователю — это неэффективный путь.

Общее правило: если поле необязательно для заполнения, уберите его из формы или дайте понять, чем может быть полезно его заполнение. Например, в форме обратной связи на сайте могут быть два необязательных поля — адрес электронной почты и номер телефона — с пометкой, что можно заполнить любое из них для получения ответа администрации. Поле «номер факса» может сопровождаться пометкой «если есть». Текстобласть с комментарием в форме заказа сама по себе воспринимается как необязательная для заполнения и не требует специальных пометок.

Скорее необязательные поля требуют специальной пометки, чем обязательные.

За всеми этими рассуждениями стоит простой принцип — не просить у пользователя ничего лишнего, если нам самим от него что-нибудь нужно. Апофеоз бюрократического идиотизма — обязательные поля в форме жалобы. «Ваше мнение очень важно для нас. Расскажите, как улучшить наш сервис, только не забудьте указать ваши фамилию, имя, отчество, номер паспорта, адрес прописки, адрес электронной почты, номер мобильного и девичью фамилию матери».

P. S.

Я ничего не имею против пометки ошибочно заполненных полей.

Сергей Шейпак

20 апреля 2010

Полагаю, что Евгений задавал вопрос про специфические формы — «Есть форма из нескольких десятков полей. Часть полей обязательна для заполнения».

Есть один проект, в котором около тридцати различных форм, на каждой расположено до 

40-50

полей, а кроме того до 8 вложенных форм, каждая из которых также может иметь до 

8-10

полей.

Банальный пример: Форма директора организации.

В определённых случаях требуется обязательное заполнение сведений об образовании и о родственниках (это две подформы). Большая вероятность того, один и тот же оператор столкнётся с тем, что в одном случае для Иванова заполнение подформ обязательно, а для Сидорова — нет. Т. е. рефлекс как у собаки Павлова — вводить «qwweqwre» в поле «Фамилия» выработать невозможно. Кроме того, оператор головой отвечает за то, что он вводит, так что валидность и достоверность входных данных архиважна.

Более того, на форме присутствуют динамические элементы, меняющие признак «обязательное»/«не обязательное«/»недоступное» в зависимости от того, что оператор вводит/выбирает в текущий момент.

У нас применяется следующая схема:
серые поля — недоступные,

светло-голубые

 — обязательны для заполнения,

светло-красные

 — данные введены неверно.

Таким образом, оператор сразу видит тот минимум, который ему нужно заполнить, чтобы утвердить форму. И, соотвественно, при неверно введённых данных он сразу видит ошибки.

Время на прочтение
4 мин

Количество просмотров 5.5K

Путеводитель: Часть 1. Вступление ● Часть 2. Речевой барьер ● Часть 3. Ошибки в формах ● Часть 4. Ошибки на сервере ● Часть 5. Рука помощи

01 Важным элементом взаимодействия сайта с пользователем являются формы ввода данных (или просто формы), а также отдельные их элементы. Форма может быть представленна одной кнопкой OK или же целым набором текстовых полей, списков выбора, чекбоксов и радиобаттанов. Сегодня я буду говорить именно о втором случае, когда элементов много.

«Хорошая форма — это форма, которая заполняется быстро и легко, даже если в ней много элементов»

02 Что представляет из себя хорошая форма? Хорошая форма — это форма, которая заполняется быстро и легко, даже если в ней много элементов. Быстрота заполнения формы зависит от того, насколько хорошо пользователь понимает, как её заполнять. Это сравнимо с заполнением бланков в какой-нибудь организации. Только, если в случае с бумажками, вам помогает красивая девушка, то здесь должна помоч правильная подача ошибок и их предотвращение.

03 Я разделяю все формы на активные и пассивные. Отличие этих форм в том, что активные сразу предупреждают пользователя о допущенной ошибке, а пассивные выдают ее только после отправки запроса. Сказать, какие из них лучше, будет плохим тоном, потому что и те и другие актуальны на данный момент. Пассивные формы используются обычно в сервисах, рассчитанных на широкий контингент пользователей, т. к. некоторые пользователи умышленно отключают поддержку технологий, на которых основываются активные формы (JavaScript). Для каждого вида есть свои правила подачи ошибок, которых я отчасти касался в предыдущих статьях и о которых я вспомню сегодня. Ну что ж, приступим.

«Каждая ошибка по возможности должна быть предотвращена»

04 Предотвращение ошибок в пассивных формах. Недавно я опять переосмысливал устройство регистрационной формы в Gmail. В этой пассивной форме меня привлекли следующие вещи. Во-первых, в ней отсутствует выделение обязательных для заполнения полей. Совершенно ясно, что здесь должно заполняться каждое поле (хотя зачем я должен указывать свою фамилию?), тем не менее, это может породить ненужные ошибки и затянуть процесс заполнения формы. Возможно, стоило написать на видном месте, что все поля обязательны для заполнения. Во-вторых, Google перепутали пояснительный текст с ошибкой:


Форма регистрации аккаунта в Gmail

Примеры, это, конечно, хорошо, но их явно не достаточно. Как вариант, текст ошибки должен был выглядеть следующим образом: «Поле заполнено неправильно», а то, что выдает Gmail сейчас, должно было быть написано под или над полем. С одной стороны это хороший метод, но с другой есть риск превратить интерфейс в нечеловечный. Представьте себе, что все ошибки будут вида: «Поле заполнено неправильно»,— брр:


Форма регистрации аккаунта на Free-lance.ru

По сему, рекомендую использовать это только в маленьких пассивных формах, а для больших форм применять другое решение. Взгляните на неправильно заполненное поле пароля:


Форма регистрации аккаунта в Gmail

Зачем дублировать информацию? Суть второго метода в том, чтобы подсветить красным пояснительный текст и выдать его за ошибку. Таким образом пользователь не будет думать, как верно заполнить поле, а сразу узнает это. Мне кажется, если бы дизайнеры Gmail использовали эти рекомендации, то я бы заполнил форму быстрее. Каждая ошибка по возможности должна быть предотвращена. Запомните это.

05 Подача ошибок в пассивных формах. Здесь действуют рекомендации, приведённые в предыдущих статьях (во Вступлении и Речевом барьере). Давайте вспомним их:
— необходимо использовать привязанность ошибок к их причинам или размещать их в ожидаемом месте (иначе: размещать их с неправильно заполненным полем);
— если нет возможности использовать привязанность, использовать цветовое кодирование (иначе: выделять одним цветом ошибочное поле и выноску);
— писать текст ошибки только на языке интерфейса сайта;
— формулировать ошибку четко, не используя литературных оборотов и неправильных словесных последовательностей.

«Главное правило активной формы: она должна посылать запрос лишь один раз за случай»

06 Организация активной формы. Итак, начнем с хорошего примера:


Форма загрузки изображений на Flickr.com

Главное правило активной формы: она должна посылать запрос лишь один раз за случай. Это достигается путем анализа на лету введённых в форму данных и мгновенной выдачи ошибки, а также выключением кнопки Отправить. Если кнопка отправить включается до того, как все ошибки исправлены, то такая форма не представляет большой ценности и не намного улучшает процесс её заполнения:


Форма отправки заяквки в Бизнес-линч

Я узнал о том, что моя фотография больше, только после того, как нажал на Отправить, которая почему-то включилась.

07 Предостерегать же пользователя от ошибок в этом случае можно по-разному. Использовать ли навороченные поп-ап окна, в которых, при наведении на поле будет показываться пояснение, для придания больше заметности или просто написать снизу, что в логине можно использовать только латинские буквы от A до Z, зависит от ваших задач и фантазии:


Первый шаг регистрации на Photobucket.com

08 Основные правила подачи ошибок в активной форме не отличаются от правил пассивной формы. Единственное, у вас появляется возможность для эксперементов и создания новых интересных решений подачи ошибок. Это, опять же, зависит от вашей фантазии.

Оригинал статьи можно найти в моём жж.
Роман Горшков (FUEL)

Обязательные поля формы


Используя формы PHP, вы можете установить определенные поля как обязательные для заполнения и, если они не были заполнены перед отправкой, отображать сообщения об ошибках.


Обязательные и необязательные поля

Во всех предыдущих примерах мы работали только с необязательными полями — скрипты работали нормально даже, если вы не вводили никаких данных. Однако часто необходимо, чтобы поля ввода в форме были обязательными. Например, если вы регистрируетесь на новом веб-сайте покупок в Интернете, от вас могут потребовать указать свой адрес, чтобы заказанные товары приходили к именно к вам. Для обозначения обязательных полей ввода обычно используется маленькая звездочка (*).

В следующем коде добавим несколько новых переменных: $nameErr, $emailErr, $educationErr, и $websiteErr. Мы будем использовать их для отображения сообщений об ошибках в случае, если остаются пустыми поля обязательные для заполнения.

Этого можно добиться, используя операторы условных выражений if else для каждой переменной $_POST. Эти операторы PHP с помощью функции empty() проверяют, пуста ли переменная $_POST. Если какое-то из обязательных полей оказалось не заполнено, то мы сохраняем сообщение об ошибке внутри соответствующей переменной ошибки.

После заполнения всех полей формы, данные введенные пользователем, будем передавать в функцию test_input():

<?php
// определяем переменные и устанавливаем пустые значения
$nameErr = $emailErr
= $genderErr = $websiteErr = «»;
$name = $email = $education = $comment =
$website = «»;

if ($_SERVER[«REQUEST_METHOD»] == «POST») {
 
if (empty($_POST[«name»])) {
    $nameErr = «Введите имя»;
  } else {
    $name = test_input($_POST[«name»]);
  }

  if (empty($_POST[«email»]))
{
    $emailErr = «Введите Email»;
  } else {
    $email = test_input($_POST[«email»]);
  }

  if (empty($_POST[«website»]))
{
    $website = «»;
  } else {
    $website = test_input($_POST[«website»]);
  }

  if (empty($_POST[«comment»])) {
    $comment = «»;
  } else {
    $comment = test_input($_POST[«comment»]);
  }

  if
(empty($_POST[«education»])) {
    $educationErr = «Выберите образование»;
  } else
{
    $education = test_input($_POST[«education»]);
  }
}
?>

Отображение сообщений об ошибках

Если какое-то из полей оказалось не заполнено, тогда мы должны уведомить об этом пользователя и не отправлять форму на сервер. Для этого в HTML-форме после каждого обязательного поля поместим тэг «span» в котором будем выводить сообщение об ошибке, если пользователь пытается отправить форму, не заполнив обязательные поля:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

 Имя: <input type="text" name="name">
 <span class="error">* <?php echo $nameErr;?></span>

 E-mail: <input type="text" name="email">
 <span class="error">* <?php echo $emailErr;?></span>

 Веб-сайт: <input type="text" name="website">
 <span class="error"><?php echo $websiteErr;?></span>

 Комментарий: <textarea name="comment" rows="5" cols="40"></textarea>

 Образование: <input type="radio" name="education"  value="Институт">Институт
 <input type="radio" name="education" value="Техникум">Техникум
 <input type="radio" name="education" value="Другое">Другое
 <span class="error">* <?php echo $educationErr;?></span>

 <input type="submit" name="submit" value="Submit"> 

 </form>

Результат выполнения кода:

Желтый

Как видим скрипт не дает отправить форму, подсказывая, что поле не заполнено. Чтобы помочь и подсказать пользователю, какие поля являются обязательными, принято рядом с полем ставить красную звездочку. Вот теперь пользователь должен понять, какие поля являются обязательными к заполнению. Ну а созданный нами сценарий PHP не даст отправить на сервер форму с незаполненными обязательными полями.

Следующим шагом является проверка входных данных, а именно мы может проверить введен ли именно email в поле email, а не просто некая строка. Как это сделать — мы узнаем уже в следующей статье.

Реши задачу!

Мы здесь

Facebook
ВКонтакте

Понравилась статья? Поделить с друзьями:
  • Все ошибки роблокса и что они значат
  • Все познается методом проб и ошибок
  • Все ошибки опель зафира а
  • Все ошибки сайтов
  • Все ошибки шевроле лачетти