jQuery Validation Plugin для валидации динамических input'ов
Вложений: 1
Приветствую Вас, профессионалы JavaScript!
Я мало программировал на JS(Ну точнее начинаю)... Ммм, чему такое долгое вступление? О чем нужно спросите) Итак, к сути:] На странице есть два блока с id="well_[номер]". Каждое из них состоит из трех input полей (cost, name, description). Схематично это выглядит так: [well_1] (cost_1) (name_1) (description_1)[/well_1] [well_2] (cost_2) (name_2) (description_2)[/well_2] Эти блоки (их может быть более 2-х) загружаются из базы. Генерируется HTML и JS код интерпретатором PHP. HTML - сами блоки JS - код валидации для сгенерированных блоков(Ниже пример кода) $("#bonuses").validate({ rules: { cost_1: { required: true, digits: true, minlength: 1, maxlength: 10 }, name_1: { required: true, only_allowed_characters: true, minlength: 3, maxlength: 20 }, description_1: { required: true, only_allowed_characters: true, minlength: 20, maxlength: 200 }, cost_2: { required: true, digits: true, minlength: 1, maxlength: 10 }, name_2: { required: true, only_allowed_characters: true, minlength: 3, maxlength: 20 }, description_2: { required: true, only_allowed_characters: true, minlength: 20, maxlength: 200 }, }, }) }); Все замечательно работает, формы проверяются. В плагин jQuery Validation Проблема в том, что новые блоки well_№, которые добавляются в страницу на лету, не представляется возможности проверять так же, как и добавленные не на лету=[ Ибо (видимо) нельзя повторно добавить правила для той же таблицы и новых полей... Пробовал добавлять следующим кодом: eval' $().ready(function() { $("#bonuses").validate({ rules: { cost_'+count+': { required: true, digits: true, minlength: 1, maxlength: 10 }, name_'+count+': { required: true, only_allowed_characters: true, minlength: 3, maxlength: 20 }, description_'+count+': { required: true, only_allowed_characters: true, minlength: 20, maxlength: 200 }, }, }) }); '; Через eval(); Возможно криво и говнокодно, но с моими PHP'шными мозгами это был единственный выход... Код не давал ни ошибок ни результата... Прошу помощи у гуру JavaScript и jQuery. Используется плагин jQuery Validation Код прилагаю в архиве. Очень надеюсь на вашу помощь. Спасибо! |
evtyshenkosemen,
var count = 3, rules = {}; rules['cost_'+count] = { required: true, digits: true, minlength: 1, maxlength: 10 }; rules['name_'+count] = { required: true, only_allowed_characters: true, minlength: 3, maxlength: 20 } rules['description_'+count] = { required: true, only_allowed_characters: true, minlength: 20, maxlength: 200 }; $("#bonuses").validate({'rules': rules }) |
рони, Ваш код понятен! На будущее запомню:) Спасибо, но он не работает в данной ситуации... Скорее всего в плагине нет возможности дописывать правила для таблиц с одинаковым id. Есть ли какой то способ это исправить?:-?
|
evtyshenkosemen,
count пропадает в примере из zip в add_well() он не доходит. это не причина но мешает. |
Цитата:
А в чем причина? Какой способ решения этой проблемы? =/ |
evtyshenkosemen,
скорее всего где-то эта переменная затирается(используется ещё) |
evtyshenkosemen,
вместо вашего eval пропишите три правила пример добавления правила для нового элемента $('#name_'+count).rules('add', { required: true, only_allowed_characters:true, minlength: 3, maxlength: 20 }) остальные пропишите по образцу. |
Цитата:
|
Цитата:
|
Настройка jQuery Validation
Позвольте я в вашей теме спрошу.
Помогите настроить плагин jquery validation. Необходимо изменить некоторые регулярки, например поле email по умолчанию считается валидным в виде "q@q", описан так: "methods: {email: function( value, element ) {return this.optional( element ) || /^[a-z0-9_-]+@[a-z0-9-]+\.[a-z]{2,6}$/i.test( value ); },}"? предположим, хочу чтоб вначале было минимум три символа перед "собакой" меняю регулярку внутри "methods:" файла "jquery.validate.js" на: "methods: {email: function( value, element ) {return this.optional( element ) || /^[a-z0-9_-]{3, }@[a-z0-9-]+\.[a-z]{2,6}$/i.test( value ); },}" но результат валидации не меняется. Пробовал добавить свой метод, дописал внутрь methods: "mydate: function(value, element){ return this.optional(element) || /^[a-zа-я]+$/i.test(value);}" , в скрипт, в rules дописал: "newinput: {required: true, mydate: true}". При отправке срабатывает required, но если добавить хоть один символ (даже цифру) в поле, то по клику на submit форма отправляется несмотря на то, что остальные поля невалидны, при чем уведомления об отправке как при штатной отправке не появляется. Что я делаю не так? Посмотреть можно тут: son.topdetal.com.ua/tab/myvalid/2.html |
Часовой пояс GMT +3, время: 11:59. |