是公司一个项目,要求显示不同的sku,然后根据sku组合显示不同的价格区间,根据填写的数量落在哪个价格区间,然后进行计算。实际截图如下:

前端JS如下:

 <script type="text/javascript">
var proSkuData = '<?php echo $this->proSkus; ?>';
var itemPriceData = '<?php echo $this->itemPrices; ?>';
var proSkus = eval("("+proSkuData+")");
var itemPrice = eval("("+itemPriceData+")");
$(document).ready(function() { /*设置价格框*/
$("#quantity").numeral();
$("#quantity").keyup(SetPrice); /*每个sku按下去的函数*/
$(".size>li").click(function(){
var li = $(this);
li.parent().find("li").removeClass("sel");
li.addClass("sel");
$("#sku"+li.parent().attr("id")).val(li.attr("id"));
SetSkuPriceList();
}); /*设置默认sku*/
SetDefaultSku(); /*不显示loading图案*/
hideLoading(); }); function SetDefaultSku(){
var total = proSkus.length;
if( total>0 ){
for(var i=0;i<total;i++){
if(proSkus[i].is_default=="1"){
$("#"+proSkus[i].attr_id).find("li#"+proSkus[i].value_id).get(0).click();
}
}
}else{
/*该产品没有sku的情况下*/
$("#identifier").val('0');
SetPriceList();
}
} function SetSkuPriceList(){
/*
* 为了兼容老的程序,所以这里还是使用skuId[]数组存放信息 Quyan 2013/7/31
*/
var skus = $("[name='skuId[]']"); var arrCI = [];
var total = proSkus.length;
/*首先取出所有的sku,然后每个应用函数*/
skus.each(function(){
var attr_id = $(this).val(); /* skuId的值 */
var value_id = $("#sku"+attr_id).val(); /* valueId的值 */
if(arrCI.length==0){ /*如果arrCI为空,说明是第一次跑循环*/
for(var i=0;i<total;i++){
if( proSkus[i].attr_id == attr_id && proSkus[i].value_id == value_id ){
/*将临时的数据压入arrCI*/
arrCI.push(proSkus[i].combine_identifier);
}
}
/*alert(arrCI);*/
}else{/*里面已经有数据了,第二次及以上 */
var arrCI2 = [];
for(var i=0;i<total;i++){
if( proSkus[i].attr_id == attr_id && proSkus[i].value_id == value_id ){
/*判断arrCI中是否有该数据*/
if($.inArray(proSkus[i].combine_identifier, arrCI) >= 0)
arrCI2.push(proSkus[i].combine_identifier);
}
}
/*将arrCI2数据放入arrCI中*/
arrCI = arrCI2;
}
}); /*最后返回id的第一项*/
if (arrCI.length > 0){
var identifier = arrCI[0];
$("#identifier").val(identifier);
/*得到标示值,开始设置价格列表*/
SetPriceList();
}
} /*根据sku identifier设置价格列表*/
function SetPriceList(){
var identifier = $("#identifier").val();
/*从价格表中找出相关价格数据*/
var arrPrice = []; /*最低价、最高价*/
var minPrice = 99999, maxPrice = 0;
var minPricePiece = 99999, maxPricePiece = 0; var total = itemPrice.length;
for ( var i = 0; i < total; i++){
if(itemPrice[i].combine_identifier == identifier){
arrPrice.push(itemPrice[i]);
if(itemPrice[i].item_price < minPrice){
minPrice = itemPrice[i].item_price;
}
if(itemPrice[i].item_price > maxPrice){
maxPrice = itemPrice[i].item_price;
}
if(itemPrice[i].item_price_per_piece < minPricePiece){
minPricePiece = itemPrice[i].item_price_per_piece;
}
if(itemPrice[i].item_price_per_piece > maxPricePiece){
maxPricePiece = itemPrice[i].item_price_per_piece;
}
}
}
/*排序*/
arrPrice.sort(function(a,b){return a.price_identifier>b.price_identifier?1:-1});
/*输出html*/
var html = '<table cellpadding="5" cellspacing="1" border="0" class="mytable">'
+ '<tr><th>数量 <?php if($this->item['item_lots']>1){echo ' (lots)';}?></th><th>価格</th></tr>';
var total = arrPrice.length;
for ( var i=0; i< total; i ++){
if (arrPrice[i].max_quantity != "65535"){
html += '<tr><td>' + formatNumber(arrPrice[i].min_quantity) + ' - ' + formatNumber(arrPrice[i].max_quantity) + '</td>'
+ '<td>&yen&nbsp;' + formatNumber(arrPrice[i].item_price) + '</td></tr>';
}else{
html += '<tr><td>' + formatNumber(arrPrice[i].min_quantity) + ' +</td>'
+ '<td>&yen&nbsp;' + formatNumber(arrPrice[i].item_price) + '</td></tr>';
}
}
$("#priceInfo").html(html);
/*显示最低价、最高价*/
<?php if($this->item['item_lots']>1){?>
$(".price.fs16").html("&yen&nbsp; " + formatNumber(minPricePiece) + "&nbsp;~&nbsp;&yen&nbsp; " + formatNumber(maxPricePiece) + "&nbsp;/piece");
<?php }else{ ?>
$(".price.fs16").html("&yen&nbsp; " + formatNumber(minPricePiece) + "&nbsp;~&nbsp;&yen&nbsp; " + formatNumber(maxPricePiece) + "&nbsp;/<?php echo substr($this->item['item_quantity'],2); ?>");
<?php }?>
SetPrice(); } function SetPrice(){
var quantity = $("#quantity").val();
var identifier = $("#identifier").val();
if(!IsNum(quantity)){
alert('quantity error!');
form.quantity.focus();
}else{
var total = itemPrice.length;
for ( var i=0; i< total; i ++){
if (itemPrice[i].combine_identifier == identifier
&& parseInt(itemPrice[i].min_quantity) <= quantity && parseInt(itemPrice[i].max_quantity) >= quantity){
var item_price = itemPrice[i].item_price;
var total_price = item_price * quantity;
/*显示合计 */
$("#total_price").html("&yen&nbsp;" + formatNumber(total_price));
/*显示总计*/
var shipping_fee = parseInt($("#shippingFee").html()) * <?php echo $this->exchangeRate;?>; var grand_total = parseInt(total_price) + parseInt(shipping_fee);
$("#grand_total").html("&yen&nbsp;" + formatNumber(grand_total));
}
}
}
} function GetShippingFee(){
showLoading();
$.post("<?php echo $this->baseUrl('term/inquire'); ?>", {
"product_id": "<?php echo $this->escape($this->item['dhgate_item_id']); ?>",
"type": "get_shipping_fee",
"quantity": $("#quantity").val(),
"shipping_method": $("#shipping").val()
},
function(data){
if(data.success){
$("#shippingFee").val(data.shippingCost);
SetPrice();
}
hideLoading();
}, "json");
} function hideLoading(){
$("#loadingImg").hide();
} function showLoading(){
$("#loadingImg").show();
} </script>

大家看看,有没有什么可以优化的地方?

第一次写这么长的js的更多相关文章

  1. 第一次写博客,关于前端开发deMVC在js中的应用

    对前端MVC MVC分别是model.view.controller的缩写,模型.视图.控制器.这些更加偏向于后台,在以前MVC是只属于后台的.当然随着技术的进步,前端的大牛们将后台的一些东西应用于前 ...

  2. 第一次写博客Poj1044

    Date bugs Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3005   Accepted: 889 Descript ...

  3. 第一次写python爬虫

    花了4天终于把写完了把国内的几个漏洞平台爬完了,第一次写py,之前一直都在说学习,然后这周任务是把国内的漏洞信息爬取一下.花了1天学PY,剩下的1天一个.期间学习到了很多.总结如下: ======== ...

  4. [改善Java代码]覆写变长方法也循规蹈矩

    建议6:覆写变长方法也循规蹈矩 在Java中,子类覆写父类中的方法很常见,这样做既可以修正Bug也可以提供扩展的业务功能支持,同时还符合开闭原则(Open-Closed Principle),我们来看 ...

  5. Java第一次写的流布局图形界面,留个纪念

    package jisuanqi; import java.awt.*; public class MyFrame extends Frame{ //继承Frame类 public MyFrame() ...

  6. HDU 2064 菜鸡第一次写博客

    果然集训就是学长学姐天天传授水铜的动态规划和搜索,今天讲DP由于困意加上面瘫学长"听不懂就是你不行"的呵呵传授,全程梦游.最后面对连入门都算不上的几道动态规划,我的内心一片宁静,甚 ...

  7. CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅

    首页   登录注册         CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅 阅读 8113 收藏 927 2017-09-26 原文链接:github.com 腾讯云容器服务CSS,立 ...

  8. 第一次写的MySQLHelper

    一. 第一次写MysqlHelper,用来管理城市的数据库 二.MySQLHelper源代码 using MySql.Data.MySqlClient; using System; using Sys ...

  9. 今天我自己第一次写了一个Windows批处理bat脚本,一起学习一下吧。

    今天我自己第一次写了一个Windows批处理bat脚本,备注一下 事情原由:自己使用Java开发了一个加解密的工具.但是当把工具给别人使用的时候,别人还需要把代码编译打包, 然后还需要看一下代码里面的 ...

随机推荐

  1. [转] valuestack,stackContext,ActionContext.之间的关系

    三者之间的关系如下图所示: ActionContext  一次Action调用都会创建一个ActionContext  调用:ActionContext context = ActionContext ...

  2. Java实现验证码制作之一自己动手

    以前弄验证码都是现找现用,下面是自己跟着敲代码弄好的,记录一下,分享给大家. 我这里用的是Servlet ,Servlet代码如下 import java.awt.Color;import java. ...

  3. iOS tableview删除多余的空cell

    self.tableview.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 加一句这个,然后给tableview一个背景色, ...

  4. centos7 最小化安装没有ifconfig及修改网卡名enoxxx为ethX

    问题: 1.最小化安装centos7后发现无ifconfig命令 想通过ifconfig查看ip地址发现ifconfig命令不存在,可通过命令 #ip addr       //查看ip 或者 解决: ...

  5. noip200802排座椅

    排座椅 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的 ...

  6. 解决导入so库报错小结

    最近公司准备将重构后的项目上线,可是等到我接手的时候发现一个很纠结的问题:安卓5.0以上的手机(例如我现在在用的红米note3)运行重构后项目发生报错,提示缺少某so库. 而5.0以下的手机(我的小米 ...

  7. mockito使用心得

    前提:pom引用<dependency> <groupId>junit</groupId> <artifactId>junit</artifact ...

  8. sql表别名

    表名.列明后面接as xx,xx就是表/列的别名,as可省略 别名通常有两个作用 as可省略,as可省略

  9. solr 设置时区

    问题 solr5.2: 发现打印log时间和真实时间对不上,服务器时间设置没有问题,后来发现,solr需要设置时区 解决方法: 直接修改bin/solr.in.sh 文件 #SOLR_TIMEZONE ...

  10. andriod逆向实验截图