Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

243
Views
Cómo aparecer dos elementos de rayas en una sola página

Me gustaría usar dos formas de pago (stripe.js) en el mismo html. Solo se puede especificar un if, por lo que aparecerá el formulario de pago que se llama primero, pero el otro no.

¿Hay alguna manera de implementar?

El elemento Stripe se montará en el primero.

 <script src="https://js.stripe.com/v3/"></script> // first one -> appeared <div id="card-number-element"></div> // another one -> not appeared <div id="card-number-element"></div> <script> var cardNumberElement = elements.create("cardNumber"); if (document.getElementById("card-number-element")) { cardNumberElement.mount("#card-number-element"); } </script>
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Esto no es posible con Stripe Elements. Si intenta crear dos elementos del mismo tipo (como el elemento de la card ) en la misma página, obtendrá este error:

 Can only create one Element of type card

Necesitaría usar un solo elemento de tarjeta, usar páginas separadas, usar elementos <iframe> o algo similar como solución alternativa.

about 4 years ago · Juan Pablo Isaza Report

0

He trabajado con Stripe varias veces, pero no lo había hecho antes, esto podría funcionar para usted o darle una idea sobre cómo seguir adelante.

La identificación html tiene que ser única en la página. Por eso solo se fabrica el primero.

 <script src="https://js.stripe.com/v3/"></script> // first one <div id="card-number-element-1"></div> // another one <div id="card-number-element-2"></div> <script> var cardNumberElement = elements.create("cardNumber"); if (document.getElementById("card-number-element-1")) { cardNumberElement.mount("#card-number-element-1"); } if (document.getElementById("card-number-element-2")) { cardNumberElement.mount("#card-number-element-2"); } </script>

Sin embargo, es posible que esto no funcione con Stripe, no estoy seguro de si admiten múltiples elementos como este.

about 4 years ago · Juan Pablo Isaza Report

0

Problemas con tu código:

  1. Nunca debe haber varios elementos HTML con la misma id en la misma página, por lo que este es un HTML incorrecto. (No romperá la página, pero como verá en el siguiente paso, causará confusión)
 <div id="card-number-element"></div> <div id="card-number-element"></div>
  1. document.getElementById siempre devolverá un solo elemento. Entonces document.getElementById("card-number-element") solo devolverá el primer elemento. Incluso cuando hay dos.

Una posible solución:

  1. use valores de id únicos. Como elemento-número-de-tarjeta card-number-element-1 card-number-element-2
  2. Habilite la selección de ambos elementos. Entonces, tal vez agreguemos la misma class a ambos elementos y usemos getElementsByClasName para seleccionarlos a ambos.
  3. Ahora, la única pregunta que queda es cómo funciona cardNumberElement.mount : ¿requiere un identificador único por elemento? Déjame ADIVINAR que podría ser. Así que tendré una id única por elemento y la pasaré a la función de mount .

Aquí está mi intento.

 <script src="https://js.stripe.com/v3/"></script> <div id="card-number-element-1"></div> <div id="card-number-element-2"></div> <script> var cardNumberElement = elements.create("cardNumber"); var elementsToMountTo = document.getElementsByClassName("card-number-element"); elementsToMountTo.forEach((element) => { cardNumberElement.mount("#" + element.id); } </script>

PD: No he investigado cómo funciona Stripe, así que no sé si la línea cardNumberElement.mount funcionará si la ejecutas dos veces así.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!