Orbeon Forms - Выбор даты меняется на неправильную дату

Когда пользователь вводит недопустимую дату в поле выбора даты, например, 99/99/99999, и пользователь щелкает мышью, в результате чего ввод теряет фокус, дата изменяется на 7/6/99999, что нежелательно, поскольку это пройдет проверку даты и не будет надежной поддержки интеллектуального ввода.

Можно ли как-то остановить это поведение или установить для forceParse значение false в компоненте xbl при настройке формы?


person clD    schedule 05.08.2020    source источник


Ответы (1)


Эта проблема с непоследовательным синтаксическим анализом лет старше 10 000 исправлена ​​в Orbeon Forms 2020.1 (которая еще не выпущена на момент написания этой статьи). Подробнее об этом см. #4637.

person avernet    schedule 06.08.2020
comment
Также возникает проблема, если вы вводите 99/99/1999, а получаете 7/6/1999. Эти проблемы также решаются или forceParse может быть отключен, поскольку он меняет дату, которая затем может пройти проверку, что приведет к неверным данным? - person clD; 06.08.2020
comment
Вы правы, та же логика применима к дням и месяцам, но в этом случае мне кажется, что это имеет больше смысла. Проблема с годами заключалась в том, что, как упоминалось в #4637, 202222 было принято , но 2022222 был преобразован в текущий год, потому что более поздний год не является допустимым годом в JavaScript, в то время как оба, скорее всего, следует считать недействительными. Поэтому мы решили всегда обрезать год, если он содержит более 4 цифр. - person avernet; 09.08.2020
comment
Но как изменить 99 на действительный месяц? Вы меняете его на 12, потому что это ближайший номер? Или сентябрь, потому что пользователь, вероятно, хотел ввести только 9, а не 99? Прямо сейчас 99 охватывает текущий месяц (август), что, я согласен, вряд ли будет правильным предположением. Кажется, что из этих трех вариантов усечение дополнительных цифр, делающих число недействительным, является наиболее целесообразным для месяца. - person avernet; 09.08.2020
comment
Но в течение нескольких дней я бы сказал, что если пользователи вводят 31 для месяца, в котором всего 30 дней, изменение его на 30 (ближайшая эвристика) будет иметь больше смысла, чем изменение его на 3 (эвристика усечения). Но если пользователи вводят 222, они, скорее всего, имели в виду 22 (эвристика усечения), а не 30 или 31 (ближайшая эвристика). Какие-нибудь мысли? -Алекс - person avernet; 09.08.2020
comment
Я бы согласился с усечением до ближайшего возможного дня/месяца, поэтому 99..n -> 9, и если в месяце 30 дней, а пользователь вводит 31, становится 30. Я бы также предложил возможность отключить forceParse, учитывая мое использование В этом случае я бы скорее дал исключение проверки или, по крайней мере, предупреждение об изменении поля, а не предположение. Я хочу создать собственный компонент XBL, чтобы обойти это. - person clD; 10.08.2020
comment
Я также предпочел бы сохранить недопустимый ввод, который не анализирует действительную дату, и пометить его как недействительный, а не пытаться принудительно ввести его в действительную дату, и, если мы не можем, очистить поле. Достаточно ли удалить forceParse, чтобы получить это? Сомневаюсь, что это ;). Вам интересно экспериментировать? Тогда, пожалуйста, продолжайте, и если у вас есть какие-то изменения, которые вы хотели бы внести, не стесняйтесь отправлять PR или оставлять комментарии здесь. Это будет похоже на план? -Алекс - person avernet; 18.08.2020