Инициализировать функцию jQuery validate() для нескольких динамически добавляемых форм

Было высказано предположение, что лучше всего инициализировать функцию $('#form').validate({}) при загрузке страницы, а не по событию клика: плагин jquery.form/validate разрешает отправку только при изменении ввода

Мне интересно, как это сделать для нескольких динамически добавляемых форм без переноса функции $('#form').validate({}) внутрь функции on('click', 'input[type="submit"]',.

Возьмите этот код, например:

var id="some identifier for the specific form that is submitted";
`$('#form'+id).validate({})`
  1. Как создается этот уникальный идентификатор id, необходимый для различения каждой формы?
  2. А что, если вы не знаете id после загрузки страницы, потому что она была создана динамически, например, с помощью AJAX.

Я делал это, но это то, что не рекомендуется:

$(document.body).on('click', 'input[type="submit"]', function(){
  var id=this.id;
  $('#form'+id).validate({});
});

мысли?

спасибо, тим


person tim peterson    schedule 11.06.2012    source источник
comment
@Sparky672Sparky672 Да, я делаю систему комментариев. Каждый комментарий можно прокомментировать, но я не знаю comment_id для следующей формы, пока не вставлю комментарий в базу данных и не верну его строку id. Думаю, вы правы, хотя я мог бы инициализировать validate() в новой форме после того, как моя функция templating() сгенерирует ее.   -  person tim peterson    schedule 12.06.2012
comment
Форма вообще не существует при загрузке страницы? Если это так, то вместо инициализации validate() на submit я бы инициализировал его сразу после создания формы ($(#myNewform).validate({ options, etc. }))   -  person Sparky    schedule 12.06.2012
comment
Да, вы хотите, чтобы он был инициализирован перед отправкой, а не после/во время.   -  person Sparky    schedule 12.06.2012
comment
Общая причина в том, что я играю с огнем в стеке вызовов, инициализируя во время отправки? Кроме того, для форм, которые существуют при загрузке страницы, я должен инициализировать каждую из них следующим образом: $('form').each(function(){...$(this).validate()});?   -  person tim peterson    schedule 12.06.2012
comment
Да, если все параметры/экземпляры validate() одинаковы для всех существующих форм, я не понимаю, почему вы не можете инициализировать их все с помощью .each(function(){.   -  person Sparky    schedule 12.06.2012
comment
да, варианты будут те же. Чтобы убедиться, я могу добавить класс к селектору следующим образом: $('.someform').each(function()...?   -  person tim peterson    schedule 12.06.2012
comment
Возможно, вы не играете с огнем, но, как я показал в трех других вопросах, у вас возникнут странные проблемы, когда формы не проходят проверку, и вы пытаетесь отправить их во второй раз.   -  person Sparky    schedule 12.06.2012
comment
понятно, спасибо за все разъяснения. Сейчас я более внимательно просмотрю эти ссылки и проголосую за ваши ответы. Спасибо за вашу помощь!   -  person tim peterson    schedule 12.06.2012
comment
Я ценю это, но позвольте мне вместо этого опубликовать ответ ниже.   -  person Sparky    schedule 12.06.2012
comment
@Sparky672 ок, это тоже сработает, спасибо   -  person tim peterson    schedule 12.06.2012


Ответы (1)


Если форма вообще не существует при загрузке страницы, то вместо инициализации .validate() при отправке я бы инициализировал ее сразу после создания формы...

// code that dynamically creates #myNewform, then initialize validate()

$('#myNewform').validate();

(validate() не должно быть внутри обработчика отправки, потому что проверка не инициализируется до тех пор, пока не будет нажата кнопка отправки. Это приводит к проблемам, когда форма не проходит проверку и должна быть отправлена ​​​​во второй раз. Вторая отправка затем повторно инициализирует плагин на форму во второй раз. after-a-form-has-alre/10609871#10609871">здесь, здесь и здесь для аналогичных вопросов.)

Для существующих form на странице...

$(document).ready(function(){
    $('#myform').validate();
});

или для нескольких form, использующих одни и те же параметры проверки...

$(document).ready(function(){
    ('.myform').each(function(){
        $(this).validate();
    });
});
person Sparky    schedule 11.06.2012