Я пытаюсь сделать так, чтобы пользователи могли вводить данные кредитной карты с помощью Stripe Element.На этой странице у меня три плана.Пользователи будут вводить информацию о кредитной карте на модальном плане после выбора плана.
Проблема не в том, чтобы отображать payment-form
на последних 2 модальностях.На самом деле, первый модальный показывает display-form
.Я обновил с getElementById
до getElementClassName
, но это не сработало бы.
app / views / payment / index.html.erb
<% @plan.each do |plan| %>
<div
class="modal fade"
id="payModal-<%= plan.id %>"
tabindex="-1"
role="dialog"
aria-labelledby="payModalLabel"
aria-hidden="true"
>
<div class="modal-dialog" role="document">
<div class="modal-content checkoutPlan">
<h2>Subscribe to <%= plan.name %> plan!</h2>
<div class="price">
<h4>$<%= plan.amount / 100 %>/mo</h4>
<p>Billed Monthly</p>
</div>
<%= form_tag(subscriptions_path, method: 'post', id: 'payment-form') do %>
<div class="stripe">
<%= hidden_field_tag 'plan_id', plan.id %>
<form action="/charge" method="post">
<div class="form-row">
<label for="card-element-<%= plan.id %>">
Enter your payment details security <i class="fas fa-lock"></i>
</label>
<div id="card-element-<%= plan.id %>">
<!-- A Stripe Element will be inserted here. -->
</div>
<!-- Used to display form errors. -->
<div id="card-errors" role="alert"></div>
</div>
<button>Submit Payment</button>
</form>
</div>
<% end %>
</div>
</div>
</div>
<% end %>
app / assets / javascript / stripe.js
// Create an instance of the card Element.
var card = elements.create("card", { style: style });
// Add an instance of the card Element into the `card-element` <div>.
card.mount("[id^=card-element-]");
// Handle real-time validation errors from the card Element.
card.addEventListener("change", function(event) {
var displayError = document.getElementById("card-errors");
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = "";
}
});