'PayPal Checkout JS button: replace drop down select list with radio buttons

I use PayPal Checkout and I generated a simple button for variable amount payments

<div id="smart-button-container">
  <div style="text-align: center;">
    <div style="margin-bottom: 1.25rem;">
      <p>Please select your SIM option:</p>
      <select id="item-options">
        <option value="5 euros" price="5">5 EUR - SIM card</option>
        <option value="10 euros" price="10">10 EUR -SIM with 2 GB data </option>
        <option value="20 euros" price="20" selected>20 EUR - Sim with 4 GB data</option>
      </select>

      <select style="visibility: hidden" id="quantitySelect"></select>
    </div>
    <div id="paypal-button-container"></div>
  </div>
</div>
<script src="https://www.paypal.com/sdk/js?client-id=xxxxxxxxxxxxxxxxM&enable-funding=venmo&currency=EUR" data-sdk-integration-source="button-factory"></script>
<script>
  if (wrongnum == 0) {

    function initPayPalButton() {
      var shipping = 0;
      var itemOptions = document.querySelector("#smart-button-container #item-options");
      var quantity = parseInt();
      var quantitySelect = document.querySelector("#smart-button-container #quantitySelect");
      if (!isNaN(quantity)) {
        quantitySelect.style.visibility = "visible";
      }
      var orderDescription = ' Prepaid Card [urlparam param="num"/]';
      if (orderDescription === '') {
        orderDescription = 'Item';
      }
      paypal.Buttons({
        style: {
          shape: 'pill',
          color: 'gold',
          layout: 'vertical',
          label: 'pay',

        },
        createOrder: function(data, actions) {
          var selectedItemDescription = itemOptions.options[itemOptions.selectedIndex].value;
          var selectedItemPrice = parseFloat(itemOptions.options[itemOptions.selectedIndex].getAttribute("price"));
          var tax = (0 === 0 || false) ? 0 : (selectedItemPrice * (parseFloat(0) / 100));
          if (quantitySelect.options.length > 0) {
            quantity = parseInt(quantitySelect.options[quantitySelect.selectedIndex].value);
          } else {
            quantity = 1;
          }

          tax *= quantity;
          tax = Math.round(tax * 100) / 100;
          var priceTotal = quantity * selectedItemPrice + parseFloat(shipping) + tax;
          priceTotal = Math.round(priceTotal * 100) / 100;
          var itemTotalValue = Math.round((selectedItemPrice * quantity) * 100) / 100;

          return actions.order.create({
            purchase_units: [{
              description: orderDescription,
              amount: {
                currency_code: 'EUR',
                value: priceTotal,
                breakdown: {
                  item_total: {
                    currency_code: 'EUR',
                    value: itemTotalValue,
                  },
                  shipping: {
                    currency_code: 'EUR',
                    value: shipping,
                  },
                  tax_total: {
                    currency_code: 'EUR',
                    value: tax,
                  }
                }
              },
              items: [{
                name: selectedItemDescription,
                unit_amount: {
                  currency_code: 'EUR',
                  value: selectedItemPrice,
                },
                quantity: quantity
              }]
            }]
          });
        },
        onApprove: function(data, actions) {
          return actions.order.capture().then(function(orderData) {

            // Full available details
            console.log('Capture result', orderData, JSON.stringify(orderData, null, 2));

            // Show a success message within this page, e.g.
            const element = document.getElementById('paypal-button-container');
            element.innerHTML = '';
            element.innerHTML = '<h3>Thank you for your payment!</h3>';

            // Or go to another URL: actions.redirect('thank_you.html');

          });
        },
        onError: function(err) {
          console.log(err);
        },
      }).render('#paypal-button-container');
    }
    initPayPalButton();
  }
</script>

The above works fine and redirects the user to PayPal in order to pay. The issue is I want to replace the drop-down menu in the beginning with radio buttons

So I replaced this part of the HTML: 

<select id="item-options">
<option value="5 euros" price="5">5 EUR - SIM card</option>
<option value="10 euros" price="10">10 EUR -SIM with 2 GB data </option>
<option value="20 euros" price="20" selected>20 EUR - Sim with 4 GB data</option>
</select>

with 

<input type="radio" name="item-options" value="5 euros" price="5">5 EUR - SIM card
<input type="radio" name="item-options" value="10 euros" price="10">10 EUR -SIM with 2 GB data
<input type="radio" name="item-options" value="20 euros" price="20">20 EUR - Sim with 4 GB data

But it does not work and won't proceed to payment. Any idea why?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source