रेल पर रूबी में, मैं form_remote_tag
सहायक का उपयोग कर एक div टैग के innerHTML
को अपडेट करने का प्रयास कर रहा हूं। यह अद्यतन तब होता है जब एक संबंधित चयन टैग एक अस्थायी घटना प्राप्त करता है। समस्या है, <select onchange="this.form.submit();">
; काम नहीं करता न ही document.forms[0].submit()
है। Form_remote_tag में निष्पादित ऑनसबमिट कोड प्राप्त करने का एकमात्र तरीका एक छुपा सबमिट बटन बनाना है, और चयन टैग से बटन पर क्लिक विधि का आह्वान करना है। यहां एक काम कर रहे ईआरबी आंशिक उदाहरण है।क्या जावास्क्रिप्ट के ऑनसममिट ईवेंट को प्रोग्राम पर प्रोग्राम रूप से कॉल करना संभव है?
<% form_remote_tag :url => product_path, :update => 'content', :method => 'get' do -%>
<% content_tag :div, :id => 'content' do -%>
<%= select_tag :update, options_for_select([["foo", 1], ["bar", 2]]), :onchange => "this.form.commit.click" %>
<%= submit_tag 'submit_button', :style => "display: none" %>
<% end %>
<% end %>
मैं ऐसा कुछ करना चाहता हूं, लेकिन यह काम नहीं करता है।
<% form_remote_tag :url => product_path, :update => 'content', :method => 'get' do -%>
<% content_tag :div, :id => 'content' do -%>
# the following line does not work
<%= select_tag :update, options_for_select([["foo", 1], ["bar", 2]]), :onchange => "this.form.onsubmit()" %>
<% end %>
<% end %>
तो, क्या इस उपयोग के मामले में अदृश्य सबमिट बटन को हटाने का कोई तरीका है?
कुछ भ्रम प्रतीत होता है। तो, मुझे समझाओ। मूल समस्या यह है कि submit()
प्रपत्र में प्रस्तुत onsubmit()
कोड को कॉल नहीं करता है।
वास्तविक HTML फार्म का है कि रेल इस ERB से renders इस तरह दिखता है:
<form action="/products/1" method="post" onsubmit="new Ajax.Updater('content', '/products/1', {asynchronous:true, evalScripts:true, method:'get', parameters:Form.serialize(this)}); return false;">
<div style="margin:0;padding:0">
<input name="authenticity_token" type="hidden" value="4eacf78eb87e9262a0b631a8a6e417e9a5957cab" />
</div>
<div id="content">
<select id="update" name="update" onchange="this.form.commit.click">
<option value="1">foo</option>
<option value="2">bar</option>
</select>
<input name="commit" style="display: none" type="submit" value="submit_button" />
</div>
</form>
मैं अदृश्य सबमिट बटन ax चाहते हैं, लेकिन एक सीधी form.submit का उपयोग कर काम नहीं प्रतीत होता है। इसलिए, मुझे फ़ॉर्म के ऑनसममिट ईवेंट कोड को कॉल करने के लिए कुछ तरीका चाहिए।
अद्यतन: अगर वहाँ एक return(false);
रेल द्वारा उत्पन्न नहीं था ओरियन एडवर्ड्स समाधान काम करेगा। मुझे यकीन नहीं है कि जो भी बदतर है, एक प्रेत भेजने के लिए एक अदृश्य सबमिट बटन पर क्लिक करें या getAttribute('onsubmit')
पर कॉलिंग को जावास्क्रिप्ट स्ट्रिंग प्रतिस्थापन के साथ रिटर्न कॉल को हटाने के बाद कॉल करें!
यह सिद्धांत में काम करता है, लेकिन मैं अभी भी एक eval का उपयोग करने से बचने के लिए उत्पादन में अपने मूल कोड का उपयोग करता हूं। – hoyhoy