2011-12-20 13 views
13

जावास्क्रिप्ट के साथ दूरदराज के प्रपत्र सबमिट मेरी रेल ऐप्लिकेशन में मुझे लगता है कि उदाहरण के लिए कुछ इस तरह दिखता एक दूरस्थ रूप है:एक रेल

<%= form_tag some_path, :method => :get, :id => 'my-form', :remote => true do %> 
    <%= text_field_tag :search, params[:search], :id => 'search-field' %> 
    <%= submit_tag 'Go' %> 
<% end %> 

अब मैं जावास्क्रिप्ट के माध्यम से यह फ़ॉर्म सबमिट करेंगे और सभी को गति प्रदान करना चाहते हैं रेल दूरस्थ रूप कॉलबैक। अब तक मैंने कुछ चीजों की कोशिश की है लेकिन कुछ भी काम नहीं कर रहा है।

बातें मैं कोशिश की है:

$('#my-form').trigger('onsubmit') 

$.rails.callFormSubmitBindings($('#search-form')) 

लेकिन कोई किस्मत अब तक। कोई विचार?

+1

'$ (" # my-form ") के बारे में क्या है। सबमिट करें()'? क्या यह आवश्यक कॉलबैक आग लगाता है? मुझे पता है कि मैंने [मेरे अपने कोड] में समान उपयोग किया है (https://github.com/BinaryMuse/BG-Tracker/blob/01a958924fc8cc67c0effa340e72ede43298b8fd/app/assets/javascripts/battlegroups.js.coffee#L5)। –

+0

हां यह करता है! : पी – Matthew

उत्तर

7

आप बस .submit() का उपयोग कर सकते हैं;

$("#my-form").submit(); 
+0

हां यह पूरी तरह से काम किया। मैं सोच रहा था उससे बहुत आसान ... – Matthew

+6

बस जोड़ना चाहते हैं कि इसे एक jQuery ऑब्जेक्ट पर कॉल किया जाना चाहिए। उदाहरण के लिए यदि आप '$ ('। A') जैसे कुछ करते हैं। बदलें (function {this.submit()}) 'यह काम नहीं करेगा। आपको 'this' को jQuery ऑब्जेक्ट में '$ (this)' लपेटना होगा। फिर आप उस पर sumbit बुला सकते हैं। –

+2

चेतावनी: फ़ॉर्म को दूरस्थ रूप से सबमिट नहीं किया जाएगा (AJAX द्वारा)। इसके बजाय एक पूर्ण ताज़ा – Fred

1

नियंत्रक से जेसन पास करने और अपने जेएस द्वारा इसे कैप्चर करने के बारे में कैसे।

अब, के रूप में

respond_to do |format| 
     if some condition 
     format.json { render :json => {:success => true} } 
     format.html{ redirect_to some_path, :notice => "successfully created" } 
     else 
     ... 
     end 
end 

नियंत्रक की कार्रवाई और जैसा कि

$('#my-form').bind 'ajax:success', (event,data) -> 
    if(data.success == true) 
    ... 

js में json पर कब्जा करने के लिए नहीं वास्तव में क्या देख रहे हैं, लेकिन उम्मीद है कि इस पता चला किसी भी मदद की हो।

+1

मेरा मानना ​​है कि वह बस यह पूछ रहा है कि फ़ॉर्म को कैसे सबमिट किया जाए। – andrewpthorp

+0

फॉर्म को स्वयं को 'some_path' के रूप में दूरस्थ रूप से सबमिट नहीं किया जाएगा। – Abhaya

46

इस रेल मार्ग में बस है:

$("#myform").trigger('submit.rails'); 
+2

यह वास्तविक जवाब है। यह एक रिमोट फॉर्म के AJAX सबमिट करने के व्यवहार को संरक्षित करता है। धन्यवाद ! – Fred

+0

आपका स्वागत है! –

+1

इस्माइल की टिप्पणी को ध्यान में रखें: आपको दूरस्थ रूप से सबमिट करने के व्यवहार के लिए अपने फॉर्म को jQuery ऑब्जेक्ट में लपेटना होगा। तो 'myForm.submit() ', लेकिन' $ (myForm)। सबमिट करें() '। मैंने इस मुद्दे को काफी समय से नहीं देखा ... – NobodysNightmare

18

रेल 5.1+, जो पुराने jquery-ujs एक गैर jQuery rails-ujs साथ बदल देता है, इसके बाद के संस्करण जवाब अब काम नहीं करेंगे, हमेशा एक के माध्यम से प्रपत्र भेज कर एचटीएमएल HTTP निवेदन।

var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery 
Rails.fire(elem, 'submit'); 

(आपको बता नहीं कर सकते कि कब तक यह मुझे ले गया यह पता लगाने की है कि एक ...) किसी कारण से, नियमित रूप से घटनाओं नहीं है बुलबुला: आप इस तरीके नई रेल ईवेंट हैंडलर प्रस्तुत गति प्रदान है रेलवे के नए delegate function का उपयोग करते हुए, जब वे jQuery द्वारा ट्रिगर किए जाते हैं, तो प्रतिनिधि कार्यक्रम हैंडलर attached by rails पर ठीक से ऊपर जाएं।

+4

THX के आधुनिक संस्करणों में सही उत्तर चिह्नित किया जाना चाहिए! यह मुझे हमेशा पता लगाने के लिए ले जाएगा .. – ErwinM

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