javascript - 如何重新加载/刷新 Stripe Checkout 按钮?

标签 javascript jquery html stripe-payments

我通过 AJAX 提交 Stripe Checkout 表单(捕获表单提交事件),因为我有一个复杂的多 Pane HTML 表单,并且希望显示 Stripe 的付款错误,而无需重新加载页面并重新生成表单或进行用户重新输入大量信息。

这一切都工作正常,除非一旦禁用了 Stripe Checkout 按钮就使用了它。在预订表单页面上显示错误消息后,我需要用户能够再次单击 Stripe 按钮并尝试不同的付款信息。 如何重新激活 Stripe 按钮?我是否需要从 DOM 中删除整个 Stripe 按钮脚本(我正在使用 jQuery)并重新插入它(或类似的代码)?

我的标准结帐按钮代码:

<script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="my_stripe_key"
    data-image="mylogo.png"
    data-name="My Booking Form"
    data-zip-code="true"
    data-locale="auto"
    data-email=""
    data-description="Payment for this booking"
    data-currency="gbp"
    data-amount=""
    data-label="Pay and book!">
</script>   

如果相关,我的 AJAX 表单提交代码:

$('#booking-form').get(0).submit = function() {
  var formdata = $(this).serialize();

  $.ajax({
    headers: {
      'X-CSRF-TOKEN': $('#booking-form > input[name="_token"]').val()
    },
    type: 'POST',
    url: 'book',
    dataType: 'json',
    data: formdata,
    success: function(data) {
      if (data.response == 'ok') // Payment went through OK
      {
        // Redirect to booking confirmation page:
        window.location.replace(data.url);
      } else // Payment failed, alert user to try again
      {
        $('#erroralert').text('Sorry, payment failed, please try again').removeClass('nodisplay');
      }
    },
    error: function(data) // Server error
    {
      console.log('Error:', data.responseText);
    }
  });

  // Prevent form submit.
  return false;
}

最佳答案

您有一个属性disabled="true",该属性在提交表单后设置为提交按钮元素。您只需删除此属性:$('button[type="submit"]').get(0).removeAttr("disabled");

有效的示例:

http://jsfiddle.net/5xq8Lhda

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form id="booking" action="your-server-side-code" method="POST">
  <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="pk_test_TYooMQauvdEDq54NiTphI7jx" data-amount="999" data-name="Stripe.com" data-description="Widget" data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
    data-locale="auto" data-zip-code="true">
  </script>
</form>

<script>
  $('#booking').get(0).submit = function() {
    $('button[type="submit"]').get(0).removeAttr("disabled");
    return false;
  }
</script>

要使用您的示例,您应该执行类似的操作:

$('#booking-form').get(0).submit = function() {
  var formdata = $(this).serialize();

  $.ajax({
    headers: {
      'X-CSRF-TOKEN': $('#booking-form > input[name="_token"]').val()
    },
    type: 'POST',
    url: 'book',
    dataType: 'json',
    data: formdata,
    success: function(data) {
      if (data.response == 'ok') // Payment went through OK
      {
        // Redirect to booking confirmation page:
        window.location.replace(data.url);
      } else // Payment failed, alert user to try again
      {
        $('#erroralert').text('Sorry, payment failed, please try again').removeClass('nodisplay');
        $('button[type="submit"]').get(0).removeAttr("disabled");
      }
    },
    error: function(data) // Server error
    {
      console.log('Error:', data.responseText);
    }
  });

  // Prevent form submit.
  return false;
}

关于javascript - 如何重新加载/刷新 Stripe Checkout 按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52571444/

相关文章:

javascript - Mongoose 从用户 ID 或基于 ip 查询

html - 试图让我的跨度文本加粗并使用更大的字体

javascript - 如何防止div容器被调整大小

javascript - 调用 AJAX 通过按钮发送值

html - CSS:仅使侧面菜单可滚动

javascript - 在javascript中查找数组的总和

javascript - 当 Angular 6 出现任何错误时如何显示错误分量?

javascript - 从 ng-include 移动到 ngRoute

jquery - 使用多个源来滑动切换元素

javascript - jquery轮播不显示在浏览器上,但显示在dreamweaver上