Javascript TypeError:变量未定义
目前我正在开发一个RubyonRails应用程序,我正在尝试让下面的JS与该应用程序一起工作。我遇到的第一个问题是turbolinks 5.0阻止页面在初始加载时加载JS,我必须刷新页面才能加载下面的JS。我在谷歌上搜索了一下,发现了一些问题,但我似乎无法让JS正常运行而不抛出错误。我们将非常感谢您的任何帮助 orders.jsJavascript TypeError:变量未定义,javascript,ruby-on-rails,turbolinks,Javascript,Ruby On Rails,Turbolinks,目前我正在开发一个RubyonRails应用程序,我正在尝试让下面的JS与该应用程序一起工作。我遇到的第一个问题是turbolinks 5.0阻止页面在初始加载时加载JS,我必须刷新页面才能加载下面的JS。我在谷歌上搜索了一下,发现了一些问题,但我似乎无法让JS正常运行而不抛出错误。我们将非常感谢您的任何帮助 orders.js console.log('inside orders.js'); $(document).on('turbolinks:load', function() { //
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();
}
}
};
});
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();
});
});
console.log('insideorders.js');
$(document).on('turbolinks:load',function(){
//你的JS在这里
风险值支付;
jQuery(函数(){
Stripe.setPublishableKey($('meta[name=“Stripe key”]”)attr('content');
返回付款。setupForm();
});
付款={
setupForm:function(){
返回$('#新订单')。提交(函数(){
$('input[type=submit]').attr('disabled',true);
Stripe.card.createToken($('new#u order'),payment.handleStripeResponse);
返回false;
});
},
HandleStripereResponse:功能(状态、响应){
如果(状态===200){
//返回警报(response.id);
$('#新订单')。追加($('.val(response.id));
返回$('new_order')[0]。提交();
}否则{
//返回警报(response.error.message);
返回$('#stripe_error').text(response.error.message).show();
}
}
};
});
如上所述,这个问题与jQuery语句在JS中的位置有关。我对JS进行了如下重构,现在一切都正常了
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();
}
}
};
});
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();
});
});
console.log('insideorders.js');
$(document).on('turbolinks:load',function(){
//你的JS在这里
风险值支付;
付款={
setupForm:function(){
返回$('#新订单')。提交(函数(){
$('input[type=submit]').attr('disabled',true);
Stripe.card.createToken($('new#u order'),payment.handleStripeResponse);
返回false;
});
},
HandleStripereResponse:功能(状态、响应){
如果(状态===200){
//返回警报(response.id);
$('#新订单')。追加($('.val(response.id));
返回$('new_order')[0]。提交();
}否则{
//返回警报(response.error.message);
返回$('#stripe_error').text(response.error.message).show();
}
}
};
jQuery(函数(){
Stripe.setPublishableKey($('meta[name=“Stripe key”]”)attr('content');
返回付款。setupForm();
});
});
“不抛出错误”
-什么错误?哪一行抛出错误?发生这种情况时的运行时值是什么?Jquery(函数(){return“sth”});如果没有太多细节,这是毫无意义的,我会说这是因为您使用$
在ready上执行jQuery,然后再次检查jQuery是否使用jQuery
准备就绪,基本上使用两个不同的值调用ready两次$
vsjQuery