Гем проверки на стороне клиента не работает, если я получаю форму через запрос ajax

Если я получаю simple_form с помощью ajax-запроса, гем проверки на стороне клиента не работает.

<%= link_to 'Add +', new_group_path, :remote => true, :id => "new_group_link" %>

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

У меня возникла проблема, что функции на стороне клиента не связаны с формой. (Функции, указанные в активах javascript.)

Но как мне вызвать эти функции.??

ИЗМЕНИТЬ

Подумайте о стандартной форме лесов. Итак, согласно тегу link_to, указанному выше. new_group_path перейдет к новому действию, и с помощью блока response_to будет отображен файл new.js.erb. Верно. Вот код в new.js.erb

  $('#new_group_link').hide().after('<%= j render("form") %>');

person Mohit Jain    schedule 18.12.2012    source источник
comment
Вы можете предоставить больше кода? Есть ли у ваших активов привязки document.onready?   -  person zb'    schedule 25.12.2012
comment
Как я понимаю, вы загрузили форму через ajax-запрос, и она не попала в onsubmit и другие обработчики, которые должны проверять форму? покажите код js, который извлекает форму.   -  person zb'    schedule 25.12.2012
comment
@eicto Обновил мой вопрос..   -  person Mohit Jain    schedule 25.12.2012
comment
Это не js :) это шаблон.   -  person zb'    schedule 26.12.2012
comment
@MohitJain мое решение работает для вас?   -  person Vasiliy Ermolovich    schedule 27.12.2012


Ответы (3)


Когда вы получаете форму с ajax, вы должны самостоятельно включить проверку на стороне клиента. Вот ссылка:

$(new_form).enableClientSideValidations();
person Vasiliy Ermolovich    schedule 25.12.2012

Если вы хотите, чтобы проверки на стороне клиента запускались для всех форм, загруженных через ajax, используйте это где-нибудь в вашем main.js:

$(document).ajaxSuccess(function(){
    if($('form[data-validate]').length){
        $('form[data-validate]').enableClientSideValidations();
    }
});

Конечно, вы должны иметь :validate => true в форме, чтобы это работало.

person Narayana    schedule 27.06.2013

Из документации найдено следующее:


В вашем Gemfile добавьте следующее:

gem 'simple_form'
gem 'client_side_validations'
gem 'client_side_validations-simple_form'

Order matters here. SimpleForm и ClientSideValidations

должен быть required before ClientSideValidations-SimpleForm.


В вашем FormBuilder вам нужно только включить проверки:

<%= form_for @user, :validate => true do |f| %>

Этого должно быть достаточно, чтобы вы начали.

По умолчанию валидаторы будут сериализованы и встроены в тег <script>, следующий за тегом. Если вы хотите отобразить этот тег <script> в другом месте, вы можете сделать это, передав имя в :validate

<%= form_for @user, :validate => :user_validators do |f| %>

Если вы визуализировали новую форму через AJAX на своей странице, вам нужно будет включить эту форму для проверки:

$(new_form).enableClientSideValidations();

Вы должны прикрепить это к событию, которое запускается при отображении нового HTML.

Вы можете использовать ту же функцию, если введете новые входные данные в существующую форму:

$(new_input).enableClientSideValidations();
person Jai    schedule 28.12.2012