5

holen Wenn ich eine simple_form mit Ajax-Request, Client-Seite Validierungen gem ..Client-Seite Validierungen gem funktioniert nicht, wenn ich Form über Ajax-Request

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

Jetzt neu das Formular Gruppe wird sich zeigen nicht funktioniert holen und es löst keine clientseitigen Validierungen aus.

Ich habe das Problem, dass clientseitige Funktionen nicht mit dem Formular binden. (Die Funktionen in Javascript-Assets angegeben.)

Aber wie ich diese Funktionen auslösen.

EDIT

Denken Sie über Standard-Gerüst bilden. Also gemäß dem oben angegebenen link_to-Tag. new_group_path wird die neue Aktion ausführen und mit read_to wird die Datei new.js.erb gerendert. Recht. Hier ist der Code in new.js.erb

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

Können Sie mehr Code bereitstellen? Haben Ihre Assets document.onready-Bindungen? –

+0

Wie ich verstehe, haben Sie das Formular über Ajax-Anfrage abgerufen, und es nicht onsubmit und andere Handler, die das Formular überprüfen sollten? Zeige den Js-Code, der die Form holt. –

+0

@eicto Aktualisiert meine Frage .. –

Antwort

11

Wenn Sie ein Formular mit Ajax bekommen sollten Sie die Client-seitige Validierung von selbst aktivieren. Hier ist die link:

$(new_form).enableClientSideValidations(); 
+0

Yupp und Antwort angenommen. –

1

Aus der Dokumentation dieses gefunden:


In Ihrem Gemfile fügen Sie den folgenden:

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

Order matters here.SimpleForm und ClientSideValidations

muss required before ClientSideValidations-SimpleForm sein.


In Ihrem Formbuilder brauchen Sie nur Validierungen aktivieren:

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

Das sollte ausreichen, um Sie zu gehen.

standardmäßig die Validierer werden in einem <script> Tag nach dem Tag serialisiert und eingebettet werden. Wenn Sie an anderer Stelle, dass <script> Tag machen möchten, können Sie dies tun, indem Sie einen Namen zu :validate

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

Wenn Sie eine neue Form über AJAX in Ihre Seite gerendert haben, müssen Sie dieses Formular ermöglichen Validierung:

$(new_form).enableClientSideValidations(); 

Sie sollten dies an ein Ereignis anfügen, das ausgelöst wird, wenn das neue HTML rendert.

können Sie die gleiche Funktion verwenden, wenn Sie neue Eingaben an eine bestehende Form vorstellen:

$(new_input).enableClientSideValidations(); 
3

Wenn Sie die Client-Seite Validierungen wollen für alle Formen auslösen über Ajax geladen, benutzen Sie diese irgendwo in der Haupt.js:

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

Natürlich sollten Sie :validate => true in Form dafür arbeiten müssen.

Verwandte Themen