A better way to call a possibility of mutliple IDs in javascript?












0












$begingroup$


I have a stripe payment form and when i use diffferent forms that get hidden, i must use separate ID's for the form to appear. I have found a way to do this but looking to simplify the code if this is possible.



I have a page that has listings for purchase. Each listing can have variants. Because of this, I need to create separate Stripe javascript so the credit card form appears.



I am wondering if there is a simpler route to go in instead of doing the folllowing:



  <script>

var stripe = Stripe('pk_test_1234567890');


var elements = stripe.elements();



var style = {
base: {
color: '#32325d',
lineHeight: '24px',
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSmoothing: 'antialiased',
fontSize: '16px',
'::placeholder': {
color: '#aab7c4'
}
},
invalid: {
color: '#fa755a',
iconColor: '#fa755a'
}
};

var card = elements.create('card', {style: style});

card.mount('#card-element');

card.addEventListener('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});

var form = document.getElementById('payment_form');
form.addEventListener('submit', function(event) {
event.preventDefault();

stripe.createToken(card).then(function(result) {
if (result.error) {
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
} else {
stripeTokenHandler(result.token);
}
});
});

function stripeTokenHandler(token) {

var form = document.getElementById('payment_form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);

// Submit the form
form.submit();
}



</script>

<script>

var stripe = Stripe('pk_test_1234567890');

var elements = stripe.elements();

var style = {
base: {
color: '#32325d',
lineHeight: '24px',
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSmoothing: 'antialiased',
fontSize: '16px',
'::placeholder': {
color: '#aab7c4'
}
},
invalid: {
color: '#fa755a',
iconColor: '#fa755a'
}
};

var card = elements.create('card', {style: style});

#HERE IS USE DIFFERENT CARD ID

card.mount('#card-element-2');

card.addEventListener('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});

var form = document.getElementById('payment_form');
form.addEventListener('submit', function(event) {
event.preventDefault();

stripe.createToken(card).then(function(result) {
if (result.error) {
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
} else {
stripeTokenHandler(result.token);
}
});
});

function stripeTokenHandler(token) {
var form = document.getElementById('payment_form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);

form.submit();
}



</script>


One of the forms:



    <div class="form-row">
<label for="card-element-2">
Credit or debit card
</label>
<div id="card-element-2" class="form-control">
</div>
<div id="card-errors" role="alert"></div>
</div>
...
...


As you see, if you look closely, there are different id's being called in each separate script. I have a commented out like #HERE I USE DIFFERENT CARD ID



I then, in the view, have separate credit card forms with different ID's. It is like this because when one form is appearing, another is hidden.



Question, is there a way where I can simplify this code and call the possibility of multiple ID's instead of having long javascript like the way i do?










share|improve this question







New contributor




uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$

















    0












    $begingroup$


    I have a stripe payment form and when i use diffferent forms that get hidden, i must use separate ID's for the form to appear. I have found a way to do this but looking to simplify the code if this is possible.



    I have a page that has listings for purchase. Each listing can have variants. Because of this, I need to create separate Stripe javascript so the credit card form appears.



    I am wondering if there is a simpler route to go in instead of doing the folllowing:



      <script>

    var stripe = Stripe('pk_test_1234567890');


    var elements = stripe.elements();



    var style = {
    base: {
    color: '#32325d',
    lineHeight: '24px',
    fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
    fontSmoothing: 'antialiased',
    fontSize: '16px',
    '::placeholder': {
    color: '#aab7c4'
    }
    },
    invalid: {
    color: '#fa755a',
    iconColor: '#fa755a'
    }
    };

    var card = elements.create('card', {style: style});

    card.mount('#card-element');

    card.addEventListener('change', function(event) {
    var displayError = document.getElementById('card-errors');
    if (event.error) {
    displayError.textContent = event.error.message;
    } else {
    displayError.textContent = '';
    }
    });

    var form = document.getElementById('payment_form');
    form.addEventListener('submit', function(event) {
    event.preventDefault();

    stripe.createToken(card).then(function(result) {
    if (result.error) {
    var errorElement = document.getElementById('card-errors');
    errorElement.textContent = result.error.message;
    } else {
    stripeTokenHandler(result.token);
    }
    });
    });

    function stripeTokenHandler(token) {

    var form = document.getElementById('payment_form');
    var hiddenInput = document.createElement('input');
    hiddenInput.setAttribute('type', 'hidden');
    hiddenInput.setAttribute('name', 'stripeToken');
    hiddenInput.setAttribute('value', token.id);
    form.appendChild(hiddenInput);

    // Submit the form
    form.submit();
    }



    </script>

    <script>

    var stripe = Stripe('pk_test_1234567890');

    var elements = stripe.elements();

    var style = {
    base: {
    color: '#32325d',
    lineHeight: '24px',
    fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
    fontSmoothing: 'antialiased',
    fontSize: '16px',
    '::placeholder': {
    color: '#aab7c4'
    }
    },
    invalid: {
    color: '#fa755a',
    iconColor: '#fa755a'
    }
    };

    var card = elements.create('card', {style: style});

    #HERE IS USE DIFFERENT CARD ID

    card.mount('#card-element-2');

    card.addEventListener('change', function(event) {
    var displayError = document.getElementById('card-errors');
    if (event.error) {
    displayError.textContent = event.error.message;
    } else {
    displayError.textContent = '';
    }
    });

    var form = document.getElementById('payment_form');
    form.addEventListener('submit', function(event) {
    event.preventDefault();

    stripe.createToken(card).then(function(result) {
    if (result.error) {
    var errorElement = document.getElementById('card-errors');
    errorElement.textContent = result.error.message;
    } else {
    stripeTokenHandler(result.token);
    }
    });
    });

    function stripeTokenHandler(token) {
    var form = document.getElementById('payment_form');
    var hiddenInput = document.createElement('input');
    hiddenInput.setAttribute('type', 'hidden');
    hiddenInput.setAttribute('name', 'stripeToken');
    hiddenInput.setAttribute('value', token.id);
    form.appendChild(hiddenInput);

    form.submit();
    }



    </script>


    One of the forms:



        <div class="form-row">
    <label for="card-element-2">
    Credit or debit card
    </label>
    <div id="card-element-2" class="form-control">
    </div>
    <div id="card-errors" role="alert"></div>
    </div>
    ...
    ...


    As you see, if you look closely, there are different id's being called in each separate script. I have a commented out like #HERE I USE DIFFERENT CARD ID



    I then, in the view, have separate credit card forms with different ID's. It is like this because when one form is appearing, another is hidden.



    Question, is there a way where I can simplify this code and call the possibility of multiple ID's instead of having long javascript like the way i do?










    share|improve this question







    New contributor




    uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$















      0












      0








      0





      $begingroup$


      I have a stripe payment form and when i use diffferent forms that get hidden, i must use separate ID's for the form to appear. I have found a way to do this but looking to simplify the code if this is possible.



      I have a page that has listings for purchase. Each listing can have variants. Because of this, I need to create separate Stripe javascript so the credit card form appears.



      I am wondering if there is a simpler route to go in instead of doing the folllowing:



        <script>

      var stripe = Stripe('pk_test_1234567890');


      var elements = stripe.elements();



      var style = {
      base: {
      color: '#32325d',
      lineHeight: '24px',
      fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
      fontSmoothing: 'antialiased',
      fontSize: '16px',
      '::placeholder': {
      color: '#aab7c4'
      }
      },
      invalid: {
      color: '#fa755a',
      iconColor: '#fa755a'
      }
      };

      var card = elements.create('card', {style: style});

      card.mount('#card-element');

      card.addEventListener('change', function(event) {
      var displayError = document.getElementById('card-errors');
      if (event.error) {
      displayError.textContent = event.error.message;
      } else {
      displayError.textContent = '';
      }
      });

      var form = document.getElementById('payment_form');
      form.addEventListener('submit', function(event) {
      event.preventDefault();

      stripe.createToken(card).then(function(result) {
      if (result.error) {
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
      } else {
      stripeTokenHandler(result.token);
      }
      });
      });

      function stripeTokenHandler(token) {

      var form = document.getElementById('payment_form');
      var hiddenInput = document.createElement('input');
      hiddenInput.setAttribute('type', 'hidden');
      hiddenInput.setAttribute('name', 'stripeToken');
      hiddenInput.setAttribute('value', token.id);
      form.appendChild(hiddenInput);

      // Submit the form
      form.submit();
      }



      </script>

      <script>

      var stripe = Stripe('pk_test_1234567890');

      var elements = stripe.elements();

      var style = {
      base: {
      color: '#32325d',
      lineHeight: '24px',
      fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
      fontSmoothing: 'antialiased',
      fontSize: '16px',
      '::placeholder': {
      color: '#aab7c4'
      }
      },
      invalid: {
      color: '#fa755a',
      iconColor: '#fa755a'
      }
      };

      var card = elements.create('card', {style: style});

      #HERE IS USE DIFFERENT CARD ID

      card.mount('#card-element-2');

      card.addEventListener('change', function(event) {
      var displayError = document.getElementById('card-errors');
      if (event.error) {
      displayError.textContent = event.error.message;
      } else {
      displayError.textContent = '';
      }
      });

      var form = document.getElementById('payment_form');
      form.addEventListener('submit', function(event) {
      event.preventDefault();

      stripe.createToken(card).then(function(result) {
      if (result.error) {
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
      } else {
      stripeTokenHandler(result.token);
      }
      });
      });

      function stripeTokenHandler(token) {
      var form = document.getElementById('payment_form');
      var hiddenInput = document.createElement('input');
      hiddenInput.setAttribute('type', 'hidden');
      hiddenInput.setAttribute('name', 'stripeToken');
      hiddenInput.setAttribute('value', token.id);
      form.appendChild(hiddenInput);

      form.submit();
      }



      </script>


      One of the forms:



          <div class="form-row">
      <label for="card-element-2">
      Credit or debit card
      </label>
      <div id="card-element-2" class="form-control">
      </div>
      <div id="card-errors" role="alert"></div>
      </div>
      ...
      ...


      As you see, if you look closely, there are different id's being called in each separate script. I have a commented out like #HERE I USE DIFFERENT CARD ID



      I then, in the view, have separate credit card forms with different ID's. It is like this because when one form is appearing, another is hidden.



      Question, is there a way where I can simplify this code and call the possibility of multiple ID's instead of having long javascript like the way i do?










      share|improve this question







      New contributor




      uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $endgroup$




      I have a stripe payment form and when i use diffferent forms that get hidden, i must use separate ID's for the form to appear. I have found a way to do this but looking to simplify the code if this is possible.



      I have a page that has listings for purchase. Each listing can have variants. Because of this, I need to create separate Stripe javascript so the credit card form appears.



      I am wondering if there is a simpler route to go in instead of doing the folllowing:



        <script>

      var stripe = Stripe('pk_test_1234567890');


      var elements = stripe.elements();



      var style = {
      base: {
      color: '#32325d',
      lineHeight: '24px',
      fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
      fontSmoothing: 'antialiased',
      fontSize: '16px',
      '::placeholder': {
      color: '#aab7c4'
      }
      },
      invalid: {
      color: '#fa755a',
      iconColor: '#fa755a'
      }
      };

      var card = elements.create('card', {style: style});

      card.mount('#card-element');

      card.addEventListener('change', function(event) {
      var displayError = document.getElementById('card-errors');
      if (event.error) {
      displayError.textContent = event.error.message;
      } else {
      displayError.textContent = '';
      }
      });

      var form = document.getElementById('payment_form');
      form.addEventListener('submit', function(event) {
      event.preventDefault();

      stripe.createToken(card).then(function(result) {
      if (result.error) {
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
      } else {
      stripeTokenHandler(result.token);
      }
      });
      });

      function stripeTokenHandler(token) {

      var form = document.getElementById('payment_form');
      var hiddenInput = document.createElement('input');
      hiddenInput.setAttribute('type', 'hidden');
      hiddenInput.setAttribute('name', 'stripeToken');
      hiddenInput.setAttribute('value', token.id);
      form.appendChild(hiddenInput);

      // Submit the form
      form.submit();
      }



      </script>

      <script>

      var stripe = Stripe('pk_test_1234567890');

      var elements = stripe.elements();

      var style = {
      base: {
      color: '#32325d',
      lineHeight: '24px',
      fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
      fontSmoothing: 'antialiased',
      fontSize: '16px',
      '::placeholder': {
      color: '#aab7c4'
      }
      },
      invalid: {
      color: '#fa755a',
      iconColor: '#fa755a'
      }
      };

      var card = elements.create('card', {style: style});

      #HERE IS USE DIFFERENT CARD ID

      card.mount('#card-element-2');

      card.addEventListener('change', function(event) {
      var displayError = document.getElementById('card-errors');
      if (event.error) {
      displayError.textContent = event.error.message;
      } else {
      displayError.textContent = '';
      }
      });

      var form = document.getElementById('payment_form');
      form.addEventListener('submit', function(event) {
      event.preventDefault();

      stripe.createToken(card).then(function(result) {
      if (result.error) {
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
      } else {
      stripeTokenHandler(result.token);
      }
      });
      });

      function stripeTokenHandler(token) {
      var form = document.getElementById('payment_form');
      var hiddenInput = document.createElement('input');
      hiddenInput.setAttribute('type', 'hidden');
      hiddenInput.setAttribute('name', 'stripeToken');
      hiddenInput.setAttribute('value', token.id);
      form.appendChild(hiddenInput);

      form.submit();
      }



      </script>


      One of the forms:



          <div class="form-row">
      <label for="card-element-2">
      Credit or debit card
      </label>
      <div id="card-element-2" class="form-control">
      </div>
      <div id="card-errors" role="alert"></div>
      </div>
      ...
      ...


      As you see, if you look closely, there are different id's being called in each separate script. I have a commented out like #HERE I USE DIFFERENT CARD ID



      I then, in the view, have separate credit card forms with different ID's. It is like this because when one form is appearing, another is hidden.



      Question, is there a way where I can simplify this code and call the possibility of multiple ID's instead of having long javascript like the way i do?







      javascript






      share|improve this question







      New contributor




      uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question







      New contributor




      uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question






      New contributor




      uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 18 mins ago









      unouno

      1




      1




      New contributor




      uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      uno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          uno is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211742%2fa-better-way-to-call-a-possibility-of-mutliple-ids-in-javascript%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          uno is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          uno is a new contributor. Be nice, and check out our Code of Conduct.













          uno is a new contributor. Be nice, and check out our Code of Conduct.












          uno is a new contributor. Be nice, and check out our Code of Conduct.
















          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211742%2fa-better-way-to-call-a-possibility-of-mutliple-ids-in-javascript%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          How to make a Squid Proxy server?

          Is this a new Fibonacci Identity?

          19世紀