所以我要做的是在submit事件中调用一个带回调的函数。发生的事情是回调函数在提交事件之后完成,我希望反之亦然。
stripeResponseHandler = function(status, response) {;
var $form = $('#new-card-details-form');
if (response.error) {
addErrorMessage(response.error.message);
return false;
} else {
var token = response.id;
$form.append($('<input id="token" type="hidden" name="token">').val(token));
}
};
$(document).ready(function() {
$('#new-card-details-form *').removeAttr('name');
Stripe.setPublishableKey('key');
var $form = $('#new-card-details-form');
$(document).on('submit', '#new-card-details-form', function(e) {
if (!$('#token').val()) {
Stripe.card.createToken($form, stripeResponseHandler);
if (!$('#token').val()) {
e.preventDefault();
}
}
});
});
所以这里发生的是表单在第二次点击时提交,因为在我检查令牌存在时的第一次点击它还不存在因为stripeResponseHandler函数将在提交事件之后完成。有没有办法可以让它在第一次点击时工作?我尝试使用unbind()在stripeResponseHandler中提交表单但是也没有用。