Отключить проверку Dojo на определенных полях - PullRequest
1 голос
/ 05 июня 2010

Я хотел бы отключить проверку на стороне клиента для определенных полей в моей пользовательской форме. В настоящее время у меня есть два набора полей, которые отображаются в зависимости от значения предыдущего выпадающего списка. т.е. если в раскрывающемся списке задано значение «A», в форме появится 1 новое поле. Если в раскрывающемся списке задано значение «B», в форме появятся 3 новых поля (взаимоисключающие от нового поля формы при выборе «A»). В настоящее время моя проверка на стороне клиента Dojo не проходит, потому что поля, которые не отображаются пользователю (и, следовательно, данные не могут быть вставлены в эти поля), не могут быть проверены.

В настоящее время я определил, что могу установить атрибут «validate» для возврата true, например:

<input type="text" id="companycity" name="companycity" class="textinput" value="<?php echo set_value('companycity'); ?>" style="<?php if(isset($errorData['companycity'])){echo $errorData['companycity'];} ?>"
            dojotype="dijit.form.ValidationTextBox"
            required="true" trim="true" validate='return true'"
            regexp="([a-zA-Z]{1,25})"
            invalidMessage="Invalid value.  Must be between 1 and 25 alphabetic characters long.">

Это исправляет мою проблему со скрытыми полями. Однако теперь это означает, что проверка не выполняется, когда это поле становится видимым для пользователя (т. Е. Атрибут validate по-прежнему имеет значение true).

Я попытался удалить свойство validate, когда пользователю отображается поле, например:

dijit.byId('companycode').attr('validate','');

Это просто устанавливает атрибут в ничто. Это, однако, приводит к ошибкам в firebug, говоря, что метод validate не найден, поэтому я предполагаю, что это означает, что я не удалил этот атрибут правильно или удаление этого атрибута не является подходящим способом сделать это.

Я также рассмотрел переопределение метода валидатора здесь , но это тоже не похоже на то, что я хочу. Я не хочу переписывать все методы валидации вместо додзё.

Я просто хочу, чтобы dojo не проверял, если поле не видно пользователю. Спасибо за любой совет или помощь.

Ответы [ 2 ]

3 голосов
/ 15 июня 2010

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

dijit.byId("companycode").attr("required", true/false)

.. чтобы убедиться, что состояние корректно обновляется в виджете.

3 голосов
/ 05 июня 2010

Я решил, что делал это неправильно.'validate' и 'validator' не являются подходящими атрибутами для dojo ValidationTextBox.Они оба выдают ошибки в Firebug вида «this.validate не является функцией».Так что сначала мне показалось, что это работает для меня в том смысле, что он больше не пытается проверять поля, но это только потому, что генерируются ошибки.

Лучшим решением было установить атрибут «required»ложно при загрузке.

<input type="text" id="companycode" name="companycode" class="textinput" value="<?php echo set_value('companycode'); ?>" style="<?php if(isset($errorData['companycode'])){echo $errorData['companycode'];} ?>"
            dojotype="dijit.form.ValidationTextBox"
            required="false" trim="true" 
            regexp="(^[A-Za-z]{2}-[0-9]{5}$)"
            invalidMessage="Invalid value.  Must be a valid company code of the form EX-00000">

Затем, когда поле стало видимым, установите для обязательного атрибута значение true.

dijit.byId('companycode').required = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...