2012-07-25 10 views
11

मैं इस प्रकार एक फ़ॉर्म का उपयोग करके LINK_TO प्रस्तुत करने के लिए कोशिश कर रहा हूँ में प्रपत्र का उपयोग LINK_TO जमा करें: निर्दिष्ट यूआरएल के लिए अपने प्रपत्ररेल

<%= form_for(@post, :url=> '/post/action', :method=> 'post', :html => {:id=>'form_id'}) do |f| %> 
    .... 

<%= link_to 'submit', "/post/action", :onclick=>"document.getElementById('form_id').submit()" %> 

    .... 

लेकिन यह रूप पोस्टिंग नहीं है, यह केवल पुनः निर्देशित किया गया है। क्या किसी को भी यह करना आता है?

उत्तर

23

आप उपयोग कर सकते हैं: आप jQuery का उपयोग कर रहे मानते हुए, यह उतना ही आसान के रूप में होना चाहिए

<%= link_to 'submit', "#", :onclick => "$('#form_id').submit()" %> 

अगर आप JQuery और रेल के बाद के संस्करण का उपयोग कर रहे हैं।

से ऊपर काम करेंगे, लेकिन यदि आप एक बहुत लंबा पृष्ठ है यह क्योंकि "#" के पेज के आप से बचने के लिए आप कर सकते हैं कि चाहते हैं तो अगर शीर्ष पर पहुंच जाएंगे:

<%= link_to 'submit', "", :onclick => "$('#form_id').submit()" %> 
7

मुझे लगता है कि दोनों चीजें होती हैं। ब्राउज़र फॉर्म जमा करना शुरू कर देता है, लेकिन यह लिंक के href का भी पालन करता है। /post/action के बजाय # से लिंक करके आप इसे ठीक कर सकते हैं ...

... हालांकि, मैं इसे करने की अनुशंसा नहीं करता हूं। कुछ बेहतर दृष्टिकोण हैं:

सबसे पहले, आप एक लिंक के बजाय एक बटन का उपयोग कर सकते हैं। इसे एक लिंक की तरह दिखने के लिए आपको इसे स्टाइल करना होगा, लेकिन यह कोई समस्या नहीं होनी चाहिए। यह बेहतर होगा, क्योंकि यह कम आश्चर्य के सिद्धांत को तोड़ नहीं देगा (कोड पढ़ने वाले लोग बटन के साथ प्रपत्र प्रस्तुत करने की अपेक्षा करते हैं) और आपको जावास्क्रिप्ट की आवश्यकता नहीं होगी।

यदि आप एक लिंक का उपयोग करने पर जोर देते हैं, तो आपको कम से कम जावास्क्रिप्ट कोड को जावास्क्रिप्ट फ़ाइल में ले जाना चाहिए। फिर इस व्यवहार को अविभाज्य रूप से जोड़ा गया है (हालांकि, आपको लिंक के साथ कोई अच्छा फॉलबैक नहीं होगा)।

$(document).on('click', '[data-submit-form]', function(e) { 
    e.preventDefault(); 
    $(this).closest('form').submit() 
}