2013-11-27 7 views
5

मुझे लगता है कि coffeescript उपयोग कर रहा है एक रेल एप्लिकेशन होना है। जब मैं पृष्ठ को रीफ्रेश करता हूं या सीधे यूआरएल का उपयोग कर जाता हूं, तो निम्न कोड काम करता है। जब मैं इस पृष्ठ के माध्यम से एक लिंक पर क्लिक करता हूं और इसे आज़माता हूं, तो यह बिल्कुल काम नहीं करता है। वह क्यों हो सकता है?Coffeescript JQuery केवल काम कर जब पेज ताजा

jQuery -> 
    console.log "Ready." 
    $('form').on 'click', '.add_fields', (event) -> 
    console.log "Click." 
    time = new Date().getTime() 
    regexp = new RegExp($(this).data('id'), 'g') 
    $(this).before($(this).data('fields').replace(regexp, time)) 
    event.preventDefault() 

एक पुनः लोड करने के बाद, मैं तैयार हो जाता हूं और उपयुक्त होने पर क्लिक करता हूं, और यह काम करता है। किसी अन्य पृष्ठ से क्लिक करने के बाद, मुझे कुछ भी नहीं मिलता है।

event.returnValue is deprecated. Please use the standard event.preventDefault() instead. 
jquery.js?body=1:5375 

त्रुटि केवल दिखाता है जब ऊपर कोड काम नहीं कर रहा: मैं भी क्रोम से इस प्रतिवाद चेतावनी है, जो मुझे यकीन है कि क्योंकि यह JQuery के भीतर ही से आ रहा है ठीक करने के लिए नहीं कर रहा हूँ मिलता है। क्या क्रोम इसे अवरुद्ध कर रहा है? मैं jquery-rails (3.0.4)

+1

आप Turbolinks का उपयोग कर रहे हैं? यदि हां, तो डीओएम रीफ्रेश होने पर फॉर्म पर हैंडलर उड़ा दिया जा रहा है। आपको इसे किसी पृष्ठ में लपेटने की आवश्यकता है: पृष्ठ को पुनर्स्थापित करें: लोड प्रकार हैंडलर। – davidfurber

+0

हां मैं हूं। मुझे एहसास नहीं हुआ कि मैं पहले था। उसके लिए धन्यवाद!! – mscriven

उत्तर

6

उपयोग कर रहा हूँ तो यह पता चला है यह turbolinks कि समस्या पैदा कर रहा था था। उस बिंदु को इंगित करने के लिए धन्यवाद डेविडबर्गर। यहाँ क्या मैं इसे ठीक करने के लिए किया था है (Rails 4: how to use $(document).ready() with turbo-links से)

ready = -> 
    $('form').on 'click', '.remove_fields', (event) -> 
    $(this).prev('input[type=hidden]').val('1') 
    $(this).closest('fieldset').hide() 
    event.preventDefault() 


$(document).ready(ready) 
$(document).on('page:load', ready) 
+1

भी $ (दस्तावेज़) .on ('turbolinks: लोड', तैयार) जोड़ने के लिए किया था; इस – user1130176

4

एक और, और अधिक सरल समाधान यहाँ है।

आप turbolinks का उपयोग करते हैं, जो रेल 4 के बाद से डिफ़ॉल्ट है, यह भी [jquery.turbolinks मणि] [1]

निर्देश काफी आसान कर रहे हैं शामिल हैं।

  1. में अपने Gemfile जोड़ें: मणि 'jQuery-turbolinks'
  2. आपकी जावास्क्रिप्ट प्रकट में (डिफ़ॉल्ट: एप्लिकेशन/आस्तियों/javascripts/application.js.coffee):
    jquery.turbolinks आवश्यकता होती है तुरंत jQuery के बाद।
    अपने लिपियों के बाद turbolinks आवश्यकता होती है।

उदाहरण:

#= require jquery 
#= require jquery.turbolinks 
#= require jquery_ujs 

# ... your other scripts here ... 

#= require turbolinks 


साथ आप ऊपर न तो आप और न ही कोड लाइनों में कोई बदलाव की जरूरत है:

$(document).ready(ready) 
$(document).on('page:load', ready) 
+0

यह .on छोड़कर हर मुद्दे पर मेरे लिए काम किया है काम करने के लिए प्राप्त करने के लिए 'क्लिक' की घटनाओं ... –

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