Home > OS >  jQuery: How to prevent item prices from being added to the total when they are unchecked?
jQuery: How to prevent item prices from being added to the total when they are unchecked?

Time:11-19

I'm developing a custom checkout and have a bit of trouble with the jQuery. What I want is for each item that's checked to be added to the Subtotal and the Total values. Also, when an item is unchecked, it is no longer added to the subtotal and total.

Currently, when I click on an option, it's added to the sub total and total values. However, when I UNcheck an item, it still adds again to the totals.

Here's the URL to the Pen I'm working in right now: https://codepen.io/BFrancoeur/pen/abyQJqj

What I've tried:

-- Unbind each event with .off(). This had no effect whatsoever on the totals -- Use .one() to limit each event to a single firing (or trigger). This didn't work, either. -- Create conditional (ternary) operators for each item and return sum = 0 when false. This had no impact on the results

What am I missing here? This is the only thing that's holding me up.

To view the code directly, see below.

Thanks!

<!-- HTML -->
<div >
  <div >
    <div  id="tmp_orpo-44887" data-de-type="orpo" data-de-editing="false" data-title="Select Product 2.0" data-ce="false" data-trigger="none" data-animate="fade" data-delay="500" style="margin-top: 0px; outline: none; cursor: pointer;" aria-disabled="false">
      <table  width="100%">
        <tbody>
          <tr >
            <th  width="70%"></th>
            <th  width="30%"></th>
          </tr>
          <tr  data-cf-product-template="true">
            <td >
              <input type="radio" id="pid-3727024-0" name="purchase[product_id]" value="3727024" data-product-label="Funnel Fusion Book" data-product-payment-type="onetime" data-product-amount="27.00" data-payment-gateway-type="" data-product-currency-code="USD" data-business-name="WebSapientClickFunnels" data-product-name="Funnel Fusion Book">
              <label for="pid-3727024-0" data-cf-product-name="true">Funnel Fusion Book</label>
            </td>
            <td  data-cf-product-price="true" taxamo-currency="USD">$27</td>
          </tr>
          <tr  data-cf-product-template="true">
            <td >
              <input type="radio" id="pid-3728625-0" name="purchase[product_id]" value="3728625" data-product-label="eBook   Audiobook                                                                                  (Add for only $9.97 more)" data-product-payment-type="onetime" data-product-amount="9.97" data-payment-gateway-type="" data-product-currency-code="USD" data-business-name="WebSapientClickFunnels" data-product-display-amount="Add for only $9.97 more" data-product-name="eBook   Audiobook">
              <label for="pid-3728625-0" data-cf-product-name="true">eBook   Audiobook </label>
            </td>
            <td  data-cf-product-price="true" taxamo-currency="USD">Add for only $9.97 more</td>
          </tr>
        </tbody>
      </table>
    </div>
    <div >
      <!--       <form>
        <div >
          <ul >
            <li >
              <div id="product_1">
                <input id="pid-3727024-0" type="radio" name="addon">
                <label for="ebook">eBook Only <span>$27.00</span></label>
              </div>
            </li>
            <li >
              <div id="product_2">
                <input id="pid-3728625-0" type="radio" name='addon'>
                <label for="audiobook">eBook   Audiobook <span>$9.95</span></label>
              </div>
            </li>
          </ul>
        </div>
      </form> -->
    </div>
  </div>
  <div >
    <div >
      <div id="orderFormBump"  style="border: 3px dashed rgb(255, 0, 0); box-sizing: border-box; padding: 15px 20px 45px 20px; background-color: #ffffff; text-align: left;">
        <div  style=" text-align: left;">
          <div style="padding: 1px 10px; margin-bottom: 10px; background-color: #ffffff; text-align: center; background-position: initial initial; background-repeat: initial initial; text-align: left;">
            <label  style=" cursor: pointer; font-size: 14px; font-weight: normal; line-height: 20px; display: inline-block; margin-bottom: 0px; min-height: 20px; padding-left: 20px; padding-top: 0px; margin-top:-1px; vertical-align: middle;">
              <img src="https://assets.clickfunnels.com/templates/listhacking-sales/images/arrow-flash-small.gif" alt="" style="max-width: 100%; height: auto; vertical-align: middle; border: 0px; float: left; position: relative; left: -25px;" data-cf-id="flashing-arrow" data-cf-note="flashing arrow" data-cf-editable-type="image">
              <input type="checkbox" name="purchase[product_ids][]" id="bump_offer_1"  style="margin: 4px 0px 0px -20px; cursor: pointer;float: left;" data-product-amount="29.97" data-storage="false">
            </label>
            <label  style="font-weight: bold; color: #ff0000; line-height: 20px; display: inline; min-height: 20px; vertical-align: middle; margin-bottom: 0px; padding-left: 0px; padding-top: 5px;"><strong style="color: #ff0000;">Yes, Add <em>Advanced Acquisition Theory To My Order! (you're saving 85% today)</em></strong>
            </label>
          </div>
          <div  style="text-align: center;">
            <p style="text-align: left" data-cf-id="order-bump" data-cf-note="orderform bump" data-cf-editable-type="rich-text">
              <font size="2"><u>
                  <font color="#CC3300"><b ></b></font>
                </u> <span >Get instant access to the <em><strong><u>Advanced Acquisition Theory Course</u></strong></em>, an in depth step-by-step course that will show you the <u>latest cutting edge strategies</u>, <u>techniques</u> and <u>tactics</u> for growing your online business - using <strong>strategies very few online business owners even know exist</strong>. You will be able to get more customers, get more clients and scale your business faster than you ever thought possible. Usually <s>$197</s>, <strong>but today's special deal is $29.95 ($167.05 savings).</strong></span></font>
            </p>
            <button type="button" opt-val="no"  id="aadtomyOrder">Yes! Add To My Order &nbsp; <i aria-hidden="true" ></i></button>
          </div>
        </div>
      </div>
      <!--       <div id="bump-offer" >
        <h2>Bump Offer</h2>
        <input type="checkbox" id="advanced-acquisition-theory" name="advanced-acquisition-theory" value="29.95">
        <label for="advanced-acquisition-theory">Yes, Add <em>Advanced Acquisition Theory To My Order! (you're saving 85% today)</em></label>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vulputate enim nulla aliquet porttitor lacus. Et netus et malesuada fames ac turpis. Neque vitae tempus quam pellentesque nec nam aliquam. Faucibus interdum posuere lorem ipsum dolor sit. Neque convallis a cras semper auctor neque vitae tempus quam. Posuere ac ut consequat semper. Donec massa sapien faucibus et molestie ac feugiat sed lectus. Dolor morbi non arcu risus quis. In ornare quam viverra orci sagittis eu volutpat odio.</p>
        <button type="button" id="btn-bump-offer">Yes! Add To My Order Now!</button>
      </div> -->
      <div >
        <form action="">
          <ul >
            <li >
              Regular Price: <span><s>$97</s></span>
            </li>
            <li >
              Your Price Today: <span>$27.00</span>
            </li>
            <li id="li-audiobook"  value="audiobookAddon">
              AC Audiobook: <span>$9.97</span>
            </li>
            <li id="li-acq-theory"  value="acquisitionTheoryBump">
              Advanced Acquisition Theory: <span><span>$29.97</span>
            </li>
            <li id="li-subtotal" >
              Subtotal: <span id="subtotalValue">$0.00</span>
            </li>
            <li >
              Tax: <span id="taxValue">$0.00</span>
            </li>
            <li id="li-total" >
              Total: <span id="totalValue">$0.00</span>
            </li>
          </ul>
          <div >
            <a href="#submit-form"  style="color: rgb(0, 9, 36); background-color: rgb(233, 120, 40); font-size: 24px;">
              <span >Place My Order<i  contenteditable="false"></i></span>
              <span ></span>
            </a>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
/* CSS */
body {
  height: 100%;
  background-color: #f0f0f0;
  color: #333333;
  display: flex;
  justify-content: center;
  align-items: center;
}

* {
  box-sizing: border-box;
}

.wrapper {
  width: 100%;
  margin: 0 auto;
  display: flex;
  font-family: "Open Sans", sans-serif;
}

.col50 {
  width: 50%;
  padding: 0 10%;
}

.col50:last-child {
  padding: 30px;
  background-color: #f0f0f0;
}

.text-red {
  color: #ff0000;
}

.text-grey {
  color: #888;
}

.big {
  font-size: 26px;
}

ul {
  list-style-type: none;
  padding: 15px;
}

ul li {
  width: 100%;
  font-weight: 600;
  line-height: 2;
}

li {
  text-align: left;
}

li > span {
  float: right;
}

.products div {
  width: 100%;
}

.products div label {
  width: 100%;
  text-align: left;
}

.products label span {
  float: right;
  text-align: right;
}
// jQuery
$(document).ready(function () {
  // check ebook radio button by default
  $("#pid-3727024-0").attr("checked", "checked");

  // hide audiobook and bump offer line items by default
  $("#li-audiobook").hide();
  $("#li-acq-theory").hide();

  var $ebookRadio = $("#pid-3727024-0");
  var $audiobookRadio = $("#pid-3728625-0");
  var $checkboxOffer = $("#bump_offer_1");
  var $btnAddToMyOrder = $("#aadtomyOrder");
  var $inputs = $("input[type=radio], input[type=checkbox]");
  var $audiobookLineItem = $("#li-audiobook");
  var $checkboxOfferLineItem = $("#li-acq-theory");
  let sum = 0;

  var $inputs = $("input[type=radio], input[type=checkbox]");
  var $inputDataProductAmount = $inputs.attr("data-product-amount");
  var inputArray = [];
  var index = 0;

  // update the line items
  function updateOrderSummary() {
    $audiobookRadio.is(":checked")
      ? $audiobookLineItem.show()
      : $audiobookLineItem.hide();

    $checkboxOffer.is(":checked")
      ? $checkboxOfferLineItem.show()
      : $checkboxOfferLineItem.hide();
  }

  // update subtotal and total
  function updateCheckout() {
    $ebookRadio.is(":checked")
      ? (sum  = parseFloat($ebookRadio.data("product-amount")))
      : false;

    $audiobookRadio.is(":checked")
      ? (sum  =
          parseFloat($audiobookRadio.data("product-amount"))  
          parseFloat($ebookRadio.data("product-amount")))
      : false;

    $checkboxOffer.is(":checked")
      ? (sum  = parseFloat($checkboxOffer.data("product-amount")))
      : false;

    $("#subtotalValue").text("$"   sum.toFixed(2));
    $("#totalValue").text("$"   sum.toFixed(2));

    // updateOrderSummary();
  }

  $ebookRadio.on("click", function () {
    updateCheckout();
    updateOrderSummary();
  });

  $audiobookRadio.on("click", function () {
    updateCheckout();
    updateOrderSummary();
  });

  $checkboxOffer.on("click", function () {
    updateCheckout();
    updateOrderSummary();
  });

  $btnAddToMyOrder.on("click", function () {
    $checkboxOffer.trigger("click");
  });
});

CodePudding user response:

The only time sum has the value of 0 is when the .ready() function is fired. Every time the updateCheckout() function is fired you only add to sum and never subtract from it.

What you need to do is set sum=0; at the very beginning of that function so that every thing gets completely recalculated every time.

  • Related