我有一个表单,让用户选择付款方式。如果方法是信用卡,则会显示一个初始化的Stripe Elements表单,它们可以输入CC/EXP/ZIP数据。单击提交后,表单应首先通过验证(jQuery Validate),然后在下一页中完成从Stripe获取令牌并传递给服务器的过程。问题是,即使函数已声明,即使我正在调用它们,它们似乎没有运行,我也不知道为什么。
var style = {
base: {
color: '#32325d',
lineHeight: '24px',
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSmoothing: 'antialiased',
fontSize: '16px',
'::placeholder': {
color: '#aab7c4'
}
},
invalid: {
color: '#fa755a',
iconColor: '#fa755a'
}
};
var card = elements.create('card', {style: style});
// Add an instance of the card Element into the `card-element` <div>
card.mount('#card-element');
// Handle real-time validation errors from the card Element.
card.addEventListener('keyup', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});
var stripe = Stripe('');
// Create an instance of Elements
var elements = stripe.elements();
jQuery( document ).ready(function() {
function stripeTokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
document.createElement('input');
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);
alert('token id is' + token.id);
var token_field = jQuery("input[name='stripeToken']").val();
alert(token_field);
// Submit the form
setTimeout(form.submit(), 3000);
};
function createToken() {
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the user if there was an error
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
alert(result.error.message);
} else {
// Send the token to your server
alert('we got the token, sending it off')
stripeTokenHandler(result.token);
}
});
};
function stripeCreateToken(event){
var selectVal = jQuery("#payment_type option:selected").val();
if( selectVal !== "Credit Card" ){
// Not CC, skip Stripe and submit the form
alert('it failed or no credit card');
var form = document.getElementById('payment-form');
form.submit();
}
createToken();
};
jQuery('#payment_type').on('change', function () {
var selectVal = jQuery("#payment_type option:selected").val();
//var form = document.getElementById('payment-form');
if( selectVal == "Credit Card" ){
jQuery('.check').hide();
jQuery('.cc').show();
jQuery("#payment-form").submit(function(e){
stripeCreateToken(e);
});
}else{
jQuery('.cc').hide();
jQuery('.check').show();
}
});
});
奇怪的是,如果我把上面的所有内容都粘贴到控制台上,它就会工作,但我想知道我做错了什么,或者至少想知道应该往哪里看。