2016-08-15 7 views
-1

Derzeit arbeite ich an einer Ruby on Rails App, und ich versuche, die unten JS mit der App arbeiten zu bekommen. Das erste Problem, auf das ich stieß, war, dass turbolinks 5.0 verhinderte, dass die Seite beim ersten Laden die JS geladen wurde, und dass ich die Seite aktualisieren musste, um die folgende JS zu laden. Ich habe etwas gegoogelt und bin auf this stackoverflow answer gestoßen, aber ich kann nicht scheinen, das JS richtig zu laufen zu lassen, ohne einen Fehler zu werfen. Jede und jede Hilfe würde sehr geschätzt werden.Javascript TypeError: Variable ist undefined

orders.js

console.log('inside orders.js'); 

$(document).on('turbolinks:load', function() { 
// Your JS here 
var payment; 

jQuery(function() { 
    Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')); 
    return payment.setupForm(); 
}); 

payment = { 
    setupForm: function() { 
    return $('#new_order').submit(function() { 
     $('input[type=submit]').attr('disabled', true); 
     Stripe.card.createToken($('#new_order'), payment.handleStripeResponse); 
     return false; 
    }); 
    }, 
    handleStripeResponse: function(status, response) { 
    if (status === 200) { 

     // return alert(response.id); 
     $('#new_order').append($('<input type="hidden" name="stripeToken" />').val(response.id)); 
     return $('#new_order')[0].submit(); 

    } else { 

     // return alert(response.error.message); 
     return $('#stripe_error').text(response.error.message).show(); 

    } 
    } 
}; 
}); 
+0

' " ohne einen Fehler zu werfen"' - Welche Fehler? Welche Zeile wirft den Fehler auf? Was sind die Laufzeitwerte, wenn das passiert? – David

+0

Jquery (Funktion() {return "sth"}); ist Unsinn –

+1

Ohne eine Menge von Details würde ich sagen, es ist, weil Sie jQuery bereit mit '$' tun und dann erneut überprüfen, wenn jQuery mit 'jQuery' bereit ist, im Grunde bereit zweimal mit zwei verschiedenen Werten' $ 'vs' aufrufen jQuery' –

Antwort

0

Als Kommentar oben erwähnt, wurde das Problem im Zusammenhang mit denen die jQuery Anweisung in der JS lag. Ich habe das JS so umstrukturiert, dass es wie folgt aussieht und alles scheint jetzt zu funktionieren.

orders.js

console.log('inside orders.js'); 

$(document).on('turbolinks:load', function() { 
// Your JS here 
var payment; 

payment = { 
    setupForm: function() { 
    return $('#new_order').submit(function() { 
     $('input[type=submit]').attr('disabled', true); 
     Stripe.card.createToken($('#new_order'), payment.handleStripeResponse); 
     return false; 
    }); 
    }, 

    handleStripeResponse: function(status, response) { 
    if (status === 200) { 

     // return alert(response.id); 
     $('#new_order').append($('<input type="hidden" name="stripeToken" />').val(response.id)); 
     return $('#new_order')[0].submit(); 

    } else { 

     // return alert(response.error.message); 
     return $('#stripe_error').text(response.error.message).show(); 

    } 
    } 
}; 

jQuery(function() { 
    Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')); 
    return payment.setupForm(); 
}); 
}); 
Verwandte Themen