2013-08-28 6 views
6

मेरे पास एक ऐसा फॉर्म है जिसका उपयोग दूरस्थ रूप से और सामान्य रूप से किया जा सकता है।मैं रिमोट फॉर्म को सबमिट करने से कैसे रोकूं?

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

मैं body पाठ क्षेत्र सामग्री केवल तभी प्रस्तुत करने के लिए प्रपत्र हैं:

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

कि कोड काम करता है जब प्रपत्र अजाक्स नहीं है। लेकिन जब यह रिमोट होता है, तो यह विफल हो जाता है और फॉर्म अभी भी सबमिट हो जाता है। क्यूं कर? मैंने यह भी कोशिश की:

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

मैं टर्बोलिंक्स के साथ रेल 4 का उपयोग कर रहा हूं।

अद्यतन: मैं ajax:beforeSend घटना बंधन की कोशिश की, यह अभी भी प्रस्तुत:

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

मेरे पास कोई सूचना दिखाई ...

उत्तर

0

शायद मैं अपने प्रश्न नहीं मिला है, लेकिन यह नहीं होना चाहिए

:required => true 

अपने text_area में जोड़ने के लिए पर्याप्त है?

+0

'आवश्यक: सत्य 'एक HTML5 विशेषता जोड़ता है जो आधे ब्राउज़र पर काम नहीं करता है। यह भरोसेमंद नहीं है। कम से कम इस समय नहीं। – user2630970

+0

जानना अच्छा है! चीयर्स। – Miotsu

4

आप अपने फॉर्म को सबमिट होने से रोकने के लिए संभावित रूप से ajax:beforeSend ईवेंट के लिए हैंडलर लागू कर सकते हैं। ऐसा लगता है कि यदि आपका ईवेंट हैंडलर false देता है तो सबमिट स्टॉप की तरह दिखता है।

विकी: https://github.com/rails/jquery-ujs/wiki/ajax

उदाहरण कार्यान्वयन: Stop $.ajax on beforeSend

0

यह एक jquery_ujs मुद्दे की तरह दिखता है। ईवेंट को बदलने का प्रयास करें:

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

मुझे एक ही समस्या का सामना करना पड़ रहा है और केवल समस्या हल हो गई है।

2

मैं Rails 5.0.0.1 उपयोग कर रहा हूँ और stoppable घटनाओं खंड में jquery-ujs प्रलेखन में वर्णित के रूप में आप केवल ajax:beforeSend स्पर्धा में false मान देने के लिए अनुरोध बंद करो और भेज होने से फार्म को रोकने के लिए की जरूरत है।

तो यह मेरे लिए पूरी तरह से काम करता है:

$(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; 
    } 
}); 

मुझे आशा है कि यह किसी और के लिए उपयोगी हो सकता है।

+0

काम करता है। लेकिन यह चीज क्या है जो फ़ॉर्म को पहली बार दो बार सबमिट करने का कारण बन रही है? –

+1

मुझे नहीं पता कि आपका मामला बिल्कुल सही है लेकिन इस मामले में सवाल यह था कि कुछ विशेष होने पर फ़ॉर्म को भेजने से कैसे रोकें। मेरे पास एक समान मामला था * फ़ॉर्म * दो बार सबमिट किया गया था * _ और ऐसा इसलिए था क्योंकि 'link_to' में मैंने' रिमोट: सच्चाई 'का उपयोग किया था और साथ ही साथ मेरे पास और एजेक्स अनुरोध' क्लास 'लिंक में से एक के साथ ट्रिगर हुआ था इस्तेमाल कर रहा था –

संबंधित मुद्दे