2013-08-28 43 views
6

Tôi có một biểu mẫu có thể được sử dụng cả từ xa lẫn bình thường.Làm thế nào để tôi ngừng gửi biểu mẫu từ xa?

= form_for @comment, html: { class: 'comment-form' }, remote: request.xhr? do |f| 
    = f.text_area :body 
    = f.submit 

Tôi muốn các mẫu này để gửi chỉ khi body textarea có nội dung:

$(document).on 'submit', '.comment-form', (e) -> 
    text = $(this).find('#comment_body').val() 
    false if text.length < 1 

Đó là mã hoạt động khi các hình thức không phải là Ajax. Nhưng khi nó ở xa, nó không thành công và biểu mẫu vẫn gửi. Tại sao? Tôi cũng đã thử:

if text.length < 1 
    e.preventDefault() 
    false 

Tôi đang sử dụng Rails 4 với Turbolinks.

Cập nhật: tôi đã cố gắng liên kết các sự kiện ajax:beforeSend, nó vẫn nộp:

$(document).on 'page:load', '.comment-form', -> 
    $(this).bind 'ajax:beforeSend', -> 
     alert "hi" 

Tôi thấy không có cảnh báo ...

Trả lời

0

Có lẽ tôi đã không nhận được câu hỏi của bạn, nhưng không nên nó được đủ để thêm

:required => true 

vào số text_area?

+0

'bắt buộc: true' thêm thuộc tính HTML5 không hoạt động trên một nửa trình duyệt. Nó không đáng tin cậy. Ít nhất là không vào lúc này. – user2630970

+0

điều cần biết! Chúc mừng. – Miotsu

0

này trông giống như một vấn đề jquery_ujs. Hãy thử thay đổi sự kiện thành:

$('.comment-form').on 'submit', (e) -> 

Tôi đang gặp phải vấn đề tương tự và chỉ giải quyết được vấn đề này.

2

Tôi đang sử dụng Rails 5.0.0.1 và như đã mô tả ở jquery-ujs tài liệu trong sự kiện stop phần bạn chỉ cần phải trả lại một giá trị false trong trường hợp ajax:beforeSend để ngăn chặn các yêu cầu và ngăn chặn các hình thức từ việc gửi.

Vì vậy, đây hoạt động hoàn hảo cho tôi:

$(document).on("ajax:beforeSend", "form#messages_form", function (e, data, status, xhr) { 
    var len = $.trim($('#message_body').val()).length; 

    if (len > 3) { 
     console.log("Send form!"); 
     return true; 
    } else { 
     console.log("Stopping request..."); 
     return false; 
    } 
}); 

Tôi hy vọng nó có thể có ích cho người khác.

+0

Hoạt động. Nhưng điều gì đang khiến cho biểu mẫu được đệ trình hai lần ngay từ đầu? –

+1

Tôi không biết đó là trường hợp của bạn chính xác nhưng trong trường hợp này câu hỏi là làm thế nào để ngăn chặn các hình thức được gửi đi nếu một cái gì đó đặc biệt xảy ra. Tôi đã có một trường hợp tương tự _the hình thức đã được * gửi hai lần * _ và đó là bởi vì trong một 'link_to' tôi sử dụng' từ xa: true' và cùng một lúc tôi đã có và yêu cầu ajax kích hoạt với một trong các 'lớp' liên kết của tôi đang sử dụng. –