jump to navigation

NOTE: The spam filter is being unusually aggressive. If you comment does not immediately appear, it has simply been placed in moderation and I will approve it as quickly as possible. Thank you for your patience.

"Murphy was an optimist!"

This morning’s programming challenge October 10, 2005 4:06 am

Posted by djuggler in : Daily Life
, trackback

Within the next 2 hours, write a piece of javascript that based upon values in a series of pulldowns determines the price of a product using quantity, an attribute, another attribute, a third attribute, and the size of the product. There is not a mathematical basis for the price.

Update: The solution follows. This is viewable through the source otherwise I wouldn’t post it. Basically we create a class/object to hold the pricing data. When then create an array of objects to hold each permutation of pricing. Then we make a call to the database and fill the array. Finally, whenever a selection box is changed, we loop through the selections comparing values to what is stored in our objects until we find the one that has the price we want. Then we update the price field. The final product can be seen shortly at Marqiprinting.com under the products listings. Right now flyers works correctly and I’m updating code for the other products.


//define a class to hold the data
function productinfo(qty, coating, sides, tag, productsize, price) {
//initialize object properties
    this.quantity = qty;
    this.uvcoating = coating;
    this.sides = sides;
    this.tag = tag;
    this.productsize = productsize;
    this.price = price;
}

//create an array to hold the objects of data
var products = new Array();

<?php
    $x=0;
    while($line=mysql_fetch_array($productsresourceid)){
       echo "products[".$x."] = new productinfo(".$line['Qty'].",".$line['Coating'].",".$line['NumSides'].",".$line['Tagline'].",'".$line['AvailableSize']."',".$line['ProductPrice'].");";
       $x++;
    }
?>

function updateprice(){
    var pricefound = false;

    for(i=0; i < products.length; i++) {
       //test values here
       frm = document.productselection;
       //businescards = ProductSize, ProductSides, Coating, qty, tag
       //brochures = ProductSize, ProductSides, Coating, qty, tag
       //cdinserts = ProductSize, Coating, qty, tag, ProductSides
       //flyers = ProductSize, ProductSides, Coating, qty, tag
       //posters = ProductSize, ProductSides, Coating, qty, tag
      if(document.getElementById('ProductSize').options[document.getElementById('ProductSize').selectedIndex].value == products[i].productsize
          && document.getElementById('ProductSides').options[document.getElementById('ProductSides').selectedIndex].value == products[i].sides
          && document.getElementById('Coating').options[document.getElementById('Coating').selectedIndex].value == products[i].uvcoating
          && document.getElementById('qty').options[document.getElementById('qty').selectedIndex].value == products[i].quantity
          && document.getElementById('tag').options[document.getElementById('tag').selectedIndex].value == products[i].tag) {
      updatedivs('price','Price: $'+products[i].price.toFixed(2));
       pricefound = true;
       alert('price found! '+products[i].price);
       }
    }
    if(!pricefound)       updatedivs('price','Price: $----');
    }
}

Comments after advertisement

Comments»

no comments yet - be the first?


trackback