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, время: 08:41. |