是公司一个项目,要求显示不同的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. Html笔记

    1. Html就是超文本标记语言的简写,是最基础的网页语言. 2. Html是通过标签来定义的语言,代码都是由标签所组成. 3. Html代码不用区分大小写. 4. Html代码由<html&g ...

  2. VerifyCodeUtil.java

    package com.vcredit.framework.utils; import java.awt.Color;import java.awt.Font;import java.awt.Grap ...

  3. 从零开始编写自己的C#框架(3)——开发规范(转)

    由于是业余时间编写,而且为了保证质量,对写出来的东西也会反复斟酌,所以每周只能更新两章左右,请大家谅解,也请大家耐心等待,谢谢大家的支持. 初学者应该怎样学习本系列内容呢?根据我自己的学习经验,一般直 ...

  4. 2016年终分析(传统开发与网络时代的Java开发)

    2016重大事件:(在此将2016年的开发称为传统开发) 1.乌镇互联网大会大会(大数据&云计算) 2.某东struts2安全漏洞 3.作为一个程序呀对于淘宝双11和双12的分析应该是最好的案 ...

  5. SQL语法整理

    SQL是Structured Query Language的缩写,中文全名为结构化查询语言,是一种用于数据存储,查询,更新和管理的关系数据库系统. SQL语法 创建表 create table tab ...

  6. Linux将中文目录改为英文

    修改系统语言环境 1.修改系统当前语言环境 export LANG=en_US 2.更新家目录的文件命名 xdg-user-dirs-gtk-update 跳出对话框,提示是否更新成英文,同意即可 3 ...

  7. 【RabbitMQ】Publish/Subscribe

    Publish/Subscribe 在上一节我们创建了一个work queue.背后的设想为每个任务被分发给明确的消费者.这节内容我们将做一些完全不同的事情 -- 我们将发送一条消息给多个消费者.这种 ...

  8. angular路由 模块 依赖注入

    1.模块 var helloModule=angular.module('helloAngular',[]); helloModule.controller('helloNgCrtl',['$scop ...

  9. Raspberry pi 添加vnc远程桌面控制

    // 安装服务 apt-get install tightvncserver // 设置连接密码 vncpasswd // 在端口1处开启服务 tightvncserver :1

  10. Glide请求图片能携带Cookie的哟!

    在Web编程中我们都很熟知一个概念,当有了seesion登录状态时,你可以访问一些资源但如果你没有登录的话很多资源是无法访问的. 在android的WebApi中当然一样拥有这个概念.比如,用户的头像 ...