2009-02-25 14 views
12

पर क्लिक किया गया है तो ड्रॉप-डाउन बॉक्स का विकल्प चुना जाने पर AJAX फ़ॉर्म को स्वतः सबमिट करने का सबसे आसान और सबसे बढ़िया तरीका क्या है? मैं एक प्रशासन पृष्ठ बना रहा हूं जहां व्यवस्थापक उपयोगकर्ता अनुमतियों को संशोधित कर सकता है (जहां "अनुमतियां" पूर्णांक के रूप में संग्रहीत की जाती हैं), और मैं "अनुमतियाँ" फ़ील्ड को ड्रॉप-डाउन बॉक्स होना चाहता हूं जो स्वचालित रूप से सबमिट करता है और व्यवस्थापक के रूप में अपडेट करता है जिस विकल्प पर वह उपयोगकर्ता चाहता है उस पर क्लिक करता है।रेल: सबमिट करें (AJAX के माध्यम से) जब ड्रॉप-डाउन विकल्प

यहां वर्तमान में जो मैं देख रहा हूं उसका संक्षिप्त संस्करण नीचे है। मुझे इसे एक दूरस्थ रूप में रूपांतरित करने का सबसे अच्छा तरीका जानने की आवश्यकता है जो एक विकल्प पर क्लिक होने पर स्वचालित रूप से सबमिट हो जाता है।

किसी भी स्पर्शिक सुझाव या कुछ और इंगित करने के लिए स्वतंत्र महसूस करें ... मैं रेल के लिए अपेक्षाकृत नया हूं, और केवल उस बिंदु तक पहुंच रहा हूं जहां मैं लगातार दूसरों के काम का संदर्भ दिए बिना कोड लिख सकता हूं।

<!-- This is the "index" view, by the way. --> 
<% for membership in @story.memberships %> 
    <% form_for membership do |f| %> 
    <%= f.select :permissions, [['none', 0], ['admin', 9]] %> 
    <% end %> 
<% end %> 

उत्तर

15

के कुछ तरीके हैं इस संभाल करने के लिए कर रहे हैं। निश्चित रूप से निरीक्षण क्षेत्र दृष्टिकोण से एक है, लेकिन आप यह भी एक सरल जावास्क्रिप्ट या एक remote_function यह करने के लिए इस्तेमाल कर सकते हैं:

यहाँ सरल जे एस दृष्टिकोण है:

<% remote_form_for membership do |f| %> 
    <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit()' %> 
<% end %> 

अन्य तरीके से कुछ इस तरह हो सकता है, और फॉर्म बिल्डर को छोड़ देगा (और इसमें कुछ वाक्यविन्यास त्रुटियां हो सकती हैं):

<%= select_tag(:permissions, [['none', 0], ['admin', 9]], {:onchange => "#{remote_function(:url => permissions_path(:story_id => story, 
      :with => "'permission='+value")}"}) 

व्यक्तिगत रूप से मैं पूर्व को पसंद करता हूं।

+0

दोनों समाधान की कोशिश के बाद, यह एक बेहतर काम कर रहा है और अच्छे के लिए देख समाप्त हो गया । धन्यवाद! –

+4

कौन सा पहला या दूसरा? – Angela

+1

@ takua108 आप किसके साथ जा रहे थे? –

4

तीन कदम!

  1. अपना form_forremote_form_for बनाएं; एक आईडी जोड़ें!
  2. जोड़ें observe_field अपने select
  3. कॉन्फ़िगर करने के बाद अपने observe_field आपके प्रपत्र

पिछले बिट तरह दिखता प्रस्तुत करने के लिए:

<%= observe_field "id_of_select", :function => "$('form_id').submit();" %> 
3

जानें कि अपनी पसंद के ढांचे का उपयोग करके रेल के बिना इसे कैसे करें। AJAX निष्पादित करने के लिए रेल टैग का उपयोग करना एक कार्य को जल्दी से पूरा कर सकता है, लेकिन टैग को निष्पादित करने के बारे में विशिष्ट चीज़ों को बदलने की आवश्यकता होने पर बहुत सीमित हो सकता है।

वेब मानकों और कैसे इन साइटों पर विनीत जावास्क्रिप्ट लिखने के बारे में पढ़ें: http://ajaxian.com/ http://www.alistapart.com/

आप कैसे रेल के बिना AJAX के प्रदर्शन करने के लिए सीखने के द्वारा और अधिक लचीला, अद्भुत UI के बनाने में सक्षम हो जाएगा।

+0

स्टैक में आपका स्वागत है। आपको प्रश्नों के विशिष्ट उत्तर प्रदान करने का प्रयास करना चाहिए, या आप मतदान कर सकते हैं। जबकि मैं आपसे सहमत हूं, और यह भी सोचता हूं कि उपरोक्त मेरा .form.onsubmit() समाधान उपयोगकर्ता द्वारा चुने गए उपयोगकर्ता से बेहतर था, यह विशिष्ट उत्तरों देने के लिए बेहतर था। –

+0

धन्यवाद स्कॉट। में इसे याद रखूंगा। मुझे अविभाज्य शैली के नमूने शामिल करने के लिए शायद मेरी पोस्ट संपादित करनी चाहिए। –

4

रेल 3 में:

<%= form_for(membership, :remote => true) do |f| %>` 
    <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit();' %> 
<% end %> 

ध्यान दें कि यह ऑनसबमिट this.form.submit(); नहीं है। और जावास्क्रिप्ट अर्धविराम मत भूलना।

1

मैं रेल 5 & उपयोग कर रहा हूँ मैं भी ऐसी ही स्थिति का सामना करना पड़ रहा था लेकिन मेरे मामले में जवाब @scott द्वारा दिए गए प्रपत्र AJAX का उपयोग कर के रूप में उम्मीद हालांकि मैं फार्म के लिए remote: true विकल्प जोड़ प्रस्तुत करने नहीं गया था (मुझे नहीं पता फॉर्म में submit बटन हैं)।

किसी भी सामना करना पड़ रहा है, तो इसी तरह की समस्या इस-

<% form_for membership remote: true, id: '#member_form' do |f| %> 
    <%= f.select :permissions, [['none', 0], ['admin', 9]], onchange: '$("#member_form").trigger("submit");' %> 
<% end %> 

आशा इस मदद करता है की तरह जे एस कोड को बदलने की कोशिश ..

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