5

Nếu tôi lấy một simple_form sử dụng yêu cầu ajax, khách hàng kiểm chứng thực bên đá quý không hoạt động ..Khách hàng kiểm chứng thực bên đá quý không làm việc nếu tôi lấy biểu mẫu qua yêu cầu ajax

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

Bây giờ nhóm hình thức mới sẽ hiển thị và không kích hoạt xác thực phía ứng dụng khách của nó.

Tôi gặp vấn đề mà các chức năng phía máy khách không ràng buộc với biểu mẫu. (Các hàm được chỉ định trong nội dung javascript.)

Nhưng cách tôi kích hoạt các chức năng đó. ??

EDIT

Hãy suy nghĩ về hình thức giàn giáo tiêu chuẩn. Vì vậy, theo thẻ link_to được chỉ định ở trên. new_group_path sẽ thực hiện hành động mới và sử dụng response_to block, tệp new.js.erb sẽ được hiển thị. Đúng. Đây là mã trong new.js.erb

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

bạn có thể cung cấp thêm mã không? Tài sản của bạn có các liên kết document.onready không? –

+0

Như tôi đã hiểu, bạn đã tìm nạp biểu mẫu thông qua yêu cầu ajax và nó không có các trình điều khiển và các trình xử lý khác, nên kiểm tra biểu mẫu nào? hiển thị mã js mà tìm nạp biểu mẫu. –

+0

@eicto Đã cập nhật câu hỏi của tôi .. –

Trả lời

11

Khi bạn nhận được biểu mẫu với ajax, bạn nên bật xác thực phía máy khách của chính mình. Đây là link:

$(new_form).enableClientSideValidations(); 
+0

Yupp và câu trả lời được chấp nhận. –

1

Từ các tài liệu tìm thấy này:


Trong Gemfile bạn thêm dòng sau:

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

Order matters here.SimpleFormClientSideValidations

cần phải là required before ClientSideValidations-SimpleForm.


Trong FormBuilder của bạn, bạn chỉ cần bật kiểm chứng thực:

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

Đó nên là đủ để giúp bạn đi.

Theo mặc định, trình xác thực sẽ được tuần tự hóa và được nhúng trong thẻ <script> theo thẻ. Nếu bạn muốn làm cho rằng <script> thẻ ở nơi khác bạn có thể làm điều này bằng cách thông qua một tên để :validate

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

Nếu bạn đã trả lại một hình thức mới thông qua AJAX vào trang của bạn, bạn sẽ cần phải bật lại hình thức cho xác thực:

$(new_form).enableClientSideValidations(); 

Bạn nên đính kèm điều này vào sự kiện được kích hoạt khi HTML mới hiển thị.

Bạn có thể sử dụng chức năng tương tự nếu bạn giới thiệu đầu vào mới cho một hình thức hiện có:

$(new_input).enableClientSideValidations(); 
3

Nếu bạn muốn kiểm chứng thực phía khách hàng để kích hoạt cho tất cả các hình thức nạp qua ajax, sử dụng một nơi nào đó trong chính bạn.js:

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

Tất nhiên, bạn cần có :validate => true trong biểu mẫu này để hoạt động.

Các vấn đề liên quan