2011-12-31 11 views
8

मैंने इस विषय के बारे में सभी SO प्रश्न और उत्तर ब्राउज़ किए हैं लेकिन मैं अभी भी अपना परिदृश्य काम करने में असमर्थ हूं। जब कोई ड्रॉपडाउन मेनू विकल्प चुना जाता है तो मैं एक क्लिक बटन कार्रवाई ट्रिगर करना चाहता हूं; सरल लगता है और AJAX के साथ बहुत आम होना चाहिए।रेल फॉर्म पर रूबी में चयन करें और चालू करें

<%= form_for(@test, :html => {:id => "form_id", :name => "MyForm", :remote => "true"}) do |form| %> 
    <%= form.label "Menu1" %> 
    <%= form.select (:Menu1, [["Option1","value1"],["Option2","value2"]], :html_options=>{:onChange=>"javascript: this.form.apply_button_name.click();"}) %> 

    <!-- more select menus and text fields here --> 

    <div class="actions"> 
     <%= form.submit "Apply", :name => "apply_button_name", :remote => "true" %> 
    </div> 
<% end %> 

मैं का इस्तेमाल किया। ":: दूरस्थ =>" सच "दोनों फार्म और बटन क्योंकि कि AJAX काम कर पाने के लिए एक ही रास्ता है के लिए मैं भी कोशिश की

यहाँ मेरी कोड के प्रासंगिक अंश हैं स्पष्ट और "जावास्क्रिप्ट" और "जावास्क्रिप्ट:" के बिना, मैंने कुछ SO उत्तरों को ब्राउज़ करने के बाद सुझाव दिया कि इससे मदद नहीं मिली। मैंने कोशिश की, और चयन करने की बजाय क्लिक करें, लेकिन अभी भी कोई भाग्य नहीं है।

जेनरेट किया गया एचटीएमएल निम्नलिखित है:

Menu1 
    <select id="test_Menu1" name="test[Menu1]"><option value="value1">Option1</option> 
<option value="value2" selected="selected">Option2</option></select> 

जैसा कि आप देख सकते हैं, HTML कोड में चेंज इवेंट हैंडलर पर कोई नहीं है; क्यूं कर? कोई भी देख रहा है कि मैं क्या गलत कर रहा हूं?

किसी भी मदद के लिए धन्यवाद।

उत्तर

14

, form.select करने के लिए अपने कॉल को संशोधित इस तरह:

<%= form.select :Menu1, [["Option1","value1"],["Option2","value2"]], {}, 
       :onChange=>"javascript: this.form.apply_button_name.click();" %> 
+0

धन्यवाद rabusmar, कि मदद के साथ onchange इस्तेमाल करने की कोशिश, लेकिन जब मैं Option1 का चयन करें, नियंत्रक मान 2 हो जाता है और इसके विपरीत। मैंने एक तीसरा विकल्प जोड़ा, और ऐसा लगता है कि नियंत्रक को वह विकल्प नहीं मिला जो मैंने अभी चुना है, लेकिन पहले एक! यह ऐसा क्यों कर रहा है? मैंने नियंत्रक को "@ test.Menu1 =" + @ test.Menu1.to_s + "\ n" डालकर इसे चेक किया है। – rh4games

+0

ऐसा इसलिए है क्योंकि जब फॉर्म भेजा जाता है तो मान सेट नहीं किया गया है। आप अपने हैंडलर में 'setTimeout' का उपयोग कर सकते हैं ताकि आप सही मान भेज सकें। – rabusmar

+0

क्या मैं पूछ सकता हूं, इस फ़ाइल के बाहर एक जावास्क्रिप्ट को इनलाइन जावास्क्रिप्ट के बजाय कैसे संदर्भित किया जाए ?? – Orz

3

आप के लिए दस्तावेज़ की जांच-पड़ताल:

API Dock Ruby on Rails select

आपको लगता है कि चयन प्रपत्र सहायक रूप ले लेता है देखेंगे:

चुनें (ऑब्जेक्ट, विधि, विकल्प, विकल्प = {}, html_options = {})

यदि आप विकल्प हैश के लिए कुछ भी पास नहीं करते हैं (आपके मामले में यह एक खाली हैश होगा), तो फॉर्म सोचता है कि आपके html_options हैश आपके विकल्प हैंश हैं, और भ्रमित हो जाते हैं।

यह जांचने का एक तरीका है {{onchange => "चेतावनी ('हैलो');"} और कुछ या तो यह देखने के लिए कि ईवेंट सफलतापूर्वक ट्रिगर करता है या वैकल्पिक रूप से, आपके वास्तविक वेब पेज में, राइट क्लिक करें चयन तत्व और इसका निरीक्षण करें। यदि एचटीएमएल में कोई अचयन विकल्प मौजूद नहीं है, तो इसका मतलब है कि आपके रेल फॉर्म हेल्पर वास्तव में अन्य विकल्पों के साथ html_options को भ्रमित कर रहा है। तो, तुम क्या करना चाहिए था:

<%= form.select (:Menu1, [["Option1","value1"],["Option2","value2"]], {}, {:onChange=>"handler();"} %> 

एचटीएमएल विकल्प से पहले विकल्प के लिए खाली HASH शामिल करना सुनिश्चित करें और आप फ़ाइन होना चाहिए। मुझे नहीं लगता कि आपको HTML_options और जावास्क्रिप्ट सामग्री भी होनी चाहिए।

अंत में, यदि onChange काम नहीं करता, कोई पूंजी सी

+0

यह काम नहीं कर रहा है। – Aravin

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