处理点击商品规格的时候 显示不同的价格 不知到从何下手?? 看这里
效果如下:
业务逻辑分析:
html页面元素:
-
{$spec.name}:
{$value.label}
用户点击属性规格,发送了什么呢??
$('button').click(function(){
spec_arr ='';
// 点击button的时候我们需要做二件事情:1 给当前button 添加样式 2 给当前button的
// 兄弟清除样式( 这些样式都是通过 添加清除类名来实现的 )
// 如果利用 attr 这个方法来操作元素的类名,那么就需要注意:
// 利用 atrr 将 class 置为空的时候它直接将之前本身的类名也一起干掉了。
// $(this).attr( 'class','act' ).siblings().attr('class','');
// 在JQ中,设计者认为对于类名的操作是很频繁的,所以它专门准备了一个方法
// 只用来操作元素的类名( 添加 删除 切换类名 )
$(this).addClass('Selected').siblings().removeClass('Selected');
//获取到button元素的长度
var length = $('#ECS_FORMBUY dl dd button[class=Selected]').length;
for(var i =0;i
{
if(i
{
//由于选中的元素+selected的class 获取其值
spec_arr+=$('#ECS_FORMBUY dl dd button[class=Selected]').eq(i).val()+',';
}else
{
spec_arr+=$('#ECS_FORMBUY dl dd button[class=Selected]').eq(i).val();
}
}
//var qty = document.forms['ECS_FORMBUY'].elements['number'].value;
//获取到规格的id 拼接为2,3这样的形式 ajax发送请求 查询对应的价格
$.get("goods.php", {act: "price", id: goodsId ,attr:spec_arr,number:qty},
function(res){
changePriceResponse(res);
},'JSON');
//Ajax.call('goods.php', 'act=price&id=' + goodsId + '&attr=' + spec_arr + '&number=' + qty, changePriceResponse, 'GET', 'JSON');
});
服务器端接收到数据后,进行了什么样的处理呢?
if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'price')
{
include('includes/cls_json.php');
$json = new JSON;
$res = array('err_msg' => '', 'result' => '', 'qty' => 1);
//接收规格id
$attr_id = isset($_REQUEST['attr']) ? explode(',', $_REQUEST['attr']) : array();
$number = (isset($_REQUEST['number'])) ? intval($_REQUEST['number']) : 1;
//如果为0进行错误的异常处理
if ($goods_id == 0)
{
$res['err_msg'] = $_LANG['err_change_attr'];
$res['err_no'] = 1;
}
else
{
if ($number == 0)
{
$res['qty'] = $number = 1;
}
else
{
$res['qty'] = $number;
}
//进行数据查询
$shop_price = get_final_price($goods_id, $number, true, $attr_id);
$res['result'] = price_format($shop_price * $number);
}
//处理为json返回给前端
die($json->encode($res));
}
那么服务器处理完,前端收到接收到处理完的数据,进行了什么处理呢??
function changePriceResponse(res)
{
//判断是否有错误
if (res.err_msg.length > 0)
{
alert(res.err_msg);
}
else
{
document.forms['ECS_FORMBUY'].elements['number'].value = res.qty;
//获取到dom元素 进行数据填充
if (document.getElementById('ECS_GOODS_AMOUNT'))
document.getElementById('ECS_GOODS_AMOUNT').innerHTML = res.result;
}
return false;
}
好啦,点击试试看吧,是否搞定啦!