From 110c9b5ffab3c1164ffba2ddf2c0f9b144cd6219 Mon Sep 17 00:00:00 2001 From: "Matthew Wire (MJW Consulting)" <mjw@mjwconsult.co.uk> Date: Thu, 14 Nov 2019 11:18:48 +1300 Subject: [PATCH] For forms that have multiple submit buttons (eg. Save, Save and New) override the submit handler on all of them --- js/civicrm_stripe.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/js/civicrm_stripe.js b/js/civicrm_stripe.js index 9cf0dc1d..4c87478c 100644 --- a/js/civicrm_stripe.js +++ b/js/civicrm_stripe.js @@ -16,7 +16,7 @@ CRM.$(function($) { var stripe; var card; var form; - var submitButton; + var submitButtons; var stripeLoading = false; // Disable the browser "Leave Page Alert" which is triggered because we mess with the form submit function. @@ -55,7 +55,9 @@ CRM.$(function($) { function nonStripeSubmit() { // Disable the submit button to prevent repeated clicks - submitButton.setAttribute('disabled', true); + for (i = 0; i < submitButtons.length; ++i) { + submitButtons[i].setAttribute('disabled', true); + } return form.submit(); } @@ -69,7 +71,9 @@ CRM.$(function($) { document.querySelector('#billing-payment-block').scrollIntoView(); window.scrollBy(0, -50); form.dataset.submitted = false; - submitButton.removeAttribute('disabled'); + for (i = 0; i < submitButtons.length; ++i) { + submitButtons[i].removeAttribute('disabled'); + } } function handleCardPayment() { @@ -244,7 +248,7 @@ CRM.$(function($) { debugging('No billing form!'); return; } - submitButton = getBillingSubmit(); + submitButtons = getBillingSubmit(); // If another submit button on the form is pressed (eg. apply discount) // add a flag that we can set to stop payment submission @@ -264,7 +268,9 @@ CRM.$(function($) { form.dataset.submitdontprocess = true; } - submitButton.addEventListener('click', submitButtonClick); + for (i = 0; i < submitButtons.length; ++i) { + submitButtons[i].addEventListener('click', submitButtonClick); + } function submitButtonClick(event) { if (form.dataset.submitted === true) { @@ -285,7 +291,9 @@ CRM.$(function($) { } // Remove the onclick attribute added by CiviCRM. - submitButton.removeAttribute('onclick'); + for (i = 0; i < submitButtons.length; ++i) { + submitButtons[i].removeAttribute('onclick'); + } addSupportForCiviDiscount(); @@ -409,7 +417,9 @@ CRM.$(function($) { } // Disable the submit button to prevent repeated clicks - submitButton.setAttribute('disabled', true); + for (i = 0; i < submitButtons.length; ++i) { + submitButtons[i].setAttribute('disabled', true); + } // Create a token when the form is submitted. handleCardPayment(); @@ -440,14 +450,14 @@ CRM.$(function($) { function getBillingSubmit() { var submit = null; if (getIsDrupalWebform()) { - submit = form.querySelector('[type="submit"].webform-submit'); + submit = form.querySelectorAll('[type="submit"].webform-submit'); if (!submit) { // drupal 8 webform - submit = form.querySelector('[type="submit"].webform-button--submit'); + submit = form.querySelectorAll('[type="submit"].webform-button--submit'); } } else { - submit = form.querySelector('[type="submit"].validate'); + submit = form.querySelectorAll('[type="submit"].validate'); } return submit; } -- GitLab