Reputation: 3560
I need to validate the form where I am using Stripe payment gateway recurring payment. My code is below.
<form method="post" action="charge.php" name="renew" onsubmit="return validate();">
<input type="radio" name="package" id="package" mode="normal" duration="30" text="1 Monat" value="29.90"> 29.90 € Pro Werbeanzeige-Laufzeit: 1 Monat<br>
<input type="radio" name="package" id="package" mode="normal" duration="60" text="2 Monate" value="49.90"> 49.90 € Pro Werbeanzeige-Laufzeit: 2 Monate<br>
<input type="radio" name="package" id="package" mode="normal" duration="90" text="3 Monate" value="59.90"> 59.90 € Pro Werbeanzeige-Laufzeit: 3 Monate<br>
<input type="radio" name="package" id="package" mode="recurring" duration="30" text="Monate" value="19.90"> 19,90 € Monate<br>
<input name="oid" type="hidden" value="<?=$oid;?>" />
<input name="mode" id="mode" type="hidden" value="" />
<input name="duration" id="duration" type="hidden" value="" />
<!--<input type="submit" name="makepayment" value="Pay" > -->
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<?php echo $stripe['publishable_key']; ?>"
data-name="GOALSTART"
data-description="1 Monate"
data-panel-label="Abonnieren"
data-label="PAY NOW"
data-locale="auto">></script>
</form>
<script type="text/javascript">
function validate(){
console.log('hello');
if (document.getElementById('package').checked) {
//alert("checked submit form");
return true;
} else {
alert("Unchecked form will not be submitted");
return false;
}
}
</script>
Here I need if radio button has not checked then the form will not submit. But as per my code it could not check the validation.
Upvotes: 0
Views: 351
Reputation: 132
Add a div around the checkout.stripe.com script. Since the "Pay Now" is being dynamically generated and thus you dont have much control over it. So you can restrict clicking on it by following method.
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<form method="post" action="charge.php" name="renew" onsubmit="validate();">
<input type="radio" name="package" id="package-1" mode="normal" duration="30" text="1 Monat" value="29.90" required="true"> 29.90 € Pro Werbeanzeige-Laufzeit: 1 Monat<br>
<input type="radio" name="package" id="package-2" mode="normal" duration="60" text="2 Monate" value="49.90"> 49.90 € Pro Werbeanzeige-Laufzeit: 2 Monate<br>
<input type="radio" name="package" id="package-3" mode="normal" duration="90" text="3 Monate" value="59.90"> 59.90 € Pro Werbeanzeige-Laufzeit: 3 Monate<br>
<input type="radio" name="package" id="package-4" mode="recurring" duration="30" text="Monate" value="19.90"> 19,90 € Monate<br>
<input name="oid" type="hidden" value="<?=$oid;?>" />
<input name="mode" id="mode" type="hidden" value="" />
<input name="duration" id="duration" type="hidden" value="" />
<!--<input type="submit" name="makepayment" value="Pay" > -->
<div class="checkout-part-wrapper">
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<?php echo $stripe['publishable_key']; ?>"
data-name="GOALSTART"
data-description="1 Monate"
data-panel-label="Abonnieren"
data-label="PAY NOW"
data-locale="auto">>
</script>
</div>
</form>
<script type="text/javascript">
jQuery('.checkout-part-wrapper').css('pointer-events', 'none');
jQuery('input[type=radio][name=package]').change(function() {
jQuery('.checkout-part-wrapper').css('pointer-events', 'auto');
});
</script>
</body>
</html>
Upvotes: 1
Reputation: 1599
Change this line
if (document.getElementById('package').checked) {
to
if (document.querySelectorAll('input[name=package]:checked').length) {
Upvotes: 0