zoukankan      html  css  js  c++  java
  • 自动刷新价格

    在最近学习的经典模块中有使用JavaScript实现购物车自动刷新商品数量和商品价格的功能;经过我的一番研究后把代码整理出来;

    由于这个例子中并没有使用到数据库,定义了一个数组作为数据源,代码如下

    <?php
        $shopcar=array(
            array("0","手机","20","100","98","9.8"),
            array("1","电脑","25","120","88","9"),
            array("2","汽车","19","200","180","9"),    
            array("3","香蕉","10","2","1.8","9"),    
            array("4","苹果","5","5","4.8","9"),    
        ); 
     ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <table border="0" cellspacing="0" cellpadding="0" align="center">
    <form id="myshopcar" name="myshopcar" method="post" action="#">
      <tr>
        <td height="30" colspan="7" align="center" valign="middle" class="first">我的购物车</td>
      </tr>
      <tr>
        <td width="35" height="25" align="center" valign="middle" class="left"> </td>
        <td width="100" height="25" align="center" valign="middle" class="center">商品名称</td>
        <td width="100" height="25" align="center" valign="middle" class="center">购买数量</td>
        <td width="100" height="25" align="center" valign="middle" class="center">市场价格</td>
        <td width="100" height="25" align="center" valign="middle" class="center">会员价格</td>
        <td width="100" height="25" align="center" valign="middle" class="center">折扣率</td>
        <td width="100" height="25" align="center" valign="middle" class="right">合计</td>
      </tr>
      <?php foreach ($shopcar as $key => $value) { ?>  
      <tr>
        <td height="25" align="center" valign="middle" class="left"><input id="chk" name="chk[]" type="checkbox" value="<?php echo $value[0]; ?>"></td>
        <td height="25" align="center" valign="middle" class="center"><div id = "c_name<?php echo $value[0]; ?>">  <?php echo $value[1]; ?></div></td>
        <td height="25" align="center" valign="middle" class="center">
        <input id="cnum<?php echo $value[0]; ?>" name="cnum<?php echo $value[0]; ?>" type="text" class="shorttxt" value="<?php echo $value[2]; ?>" onkeyup="cvp(<?php echo $value[0]; ?>,<?php echo $value[4]; ?>,<?php echo count($shopcar) ?>)"></td>
        <td height="25" align="center" valign="middle" class="center"><div id="m_price<?php echo $value[0]; ?>"> <?php echo $value[3]; ?></div></td>
        <td height="25" align="center" valign="middle" class="center"><div id="v_price<?php echo $value[0]; ?>"> <?php echo $value[4]; ?></div></td>
        <td height="25" align="center" valign="middle" class="center"><div id="fold<?php echo $value[0]; ?>"> <?php echo $value[5]; ?></div></td>
        <td height="25" align="center" valign="middle" class="right"><div id="total<?php echo $value[0]; ?>"> <?php echo $value[2]*$value[4]; ?></div></td>
      <tr>
      <?php } ?>
        <td height="25" colspan="3" align="left" valign="middle">
        <a href="#" onclick="return alldel(myshopcar)">全选</a> <a href="#" onclick="return overdel(myshopcar);">反选</a>  
        <input type="button" value="删除选择" class="btn" style="border-color: #FFFFFF;" onClick = 'return del(myshopcar);'>  </td>
        <td height="25" align="center" valign="middle"><input id="cont" name="cont" type="button" class="btn" value="去数据库修改" onclick="return conshop(myshopcar)" /></td>
        <td height="25" align="center" valign="middle"><input id="uid" name="uid" type="hidden" value="tang" ><input id="settle" name="settle" type="button" class="btn" value="去收银台" onclick="return formset(form)" /></td>
        <td height="25" colspan="2" align="right" valign="middle"><div id='sum'>共计7622 元</div></td>
        </tr>
    </form>
    </table>    
    </body>
    </html>

    然后是最主要的JavaScript脚本,实现自动刷新的功能代码如下:

    实现商品删除代码:

    <script>
    /*  删除记录  */
    function del(form){
        if(!window.confirm('是否要删除数据??')){
            
        }else{
            var leng = form.chk.length;//返回复选框的长度
            if(leng==undefined){
                if(!form.chk.checked){
                        alert('请选取要删除数据!');
                }else{//如果只有一个复选框,而且处于选中状态
                    rd = form.chk.value;//将复选框的value值直接赋给变量rd
                    var url = 'test.php?rd='+rd;//根据rd生成url
                    xmlhttp.open("GET",url,true);
                    xmlhttp.onreadystatechange = delnow;//调用delnow函数
                    xmlhttp.send(null);
                }
            }else{ //如果复选框为多个
                var rd=new Array();//声明数组
                var j = 0;
                for( var i = 0; i < leng; i++){//循环检查复选框状态
                    if(form.chk[i].checked){
                        rd[j++] = form.chk[i].value;//将被选中的复选框的value值存到rd内
                    }
                }
                if(rd == ''){
                    alert('请选取要删除数据!');
                }else{
                    var url = "test.php?rd="+rd;
                    alert(url);
                    xmlhttp.open("GET",url,true);
                    xmlhttp.onreadystatechange = delnow;
                    xmlhttp.send(null);
                }
            }
        }
        return false;
    }
    function delnow(){
        if(xmlhttp.readyState == 4&&xmlhttp.status == 200){
            var msg = xmlhttp.responseText;
            if(msg != '1'){
                alert('删除失败'+msg);
            }else{
                alert('删除成功');
                location=('?page_type=shopcar');
            }
        }
    }
    //全部选择/取消
    function alldel(form){
        var leng = form.chk.length;
        if(leng==undefined){
           if(!form.chk.checked)
                   form.chk.checked=true;
         }else{  
           for( var i = 0; i < leng; i++)
            {
                if(!form.chk[i].checked)
                      form.chk[i].checked = true;
            }
         } 
        return false;
    }
    // 反选
    function overdel(form){
         var leng = form.chk.length;
         if(leng==undefined){
           if(!form.chk.checked)
                   form.chk.checked=true;
            else
                form.chk.checked=false;
         }else{  
           for( var i = 0; i < leng; i++)
            {
                if(!form.chk[i].checked)
                      form.chk[i].checked = true;
                else
                    form.chk[i].checked = false;
            }
         } 
        return false;
    }

     实现自动刷新总金额代码:

    //自动刷新总金额
    // key商品id
    // vpr商品单价
    // shoparr商品数量
    function cvp(key,vpr,shoparr){
        var n_pre = 'total';//获取div标签的id前缀
        var num = 'cnum'+key.toString();//根据key值生成文本域的id值
        var total = n_pre+key.toString();//根据key值生成的div标签的id值
        var t_number = document.getElementById(num).value;//获取输入的商品数量
        var ttl = t_number * vpr;//根据商品数量和单价,计算商品金额
        document.getElementById(total).innerHTML = ttl;//计算商品总金额
        var sm = 0;    //所有商品总金额,初始为0
        for(var i = 0; i < shoparr; i++){//根据商品种类数,循环得到其他商品金额
            var aaa = document.getElementById(n_pre+i.toString()).innerText;
            sm += parseInt(aaa);//将所有商品金额累加
        }
        document.getElementById('sum').innerHTML = '共计:'+sm+' 元';
            
    }
    //更改商品数量
    function conshop(form){
        var n_pre = 'cnum';//获取商品数量文本域前缀
        var lang = form.chk.length;//获取复选框的数量
        if(lang == undefined){//如果只有一个复选框,那么将商品id和商品数量直接保存到变量中
            var fst = form.chk.value;
            var snd = form.cnum0.value;
        }else{//否则将商品id和对应的商品数量保存到两个相应数组中
            var fst= new Array();//商品id数组
            var snd = new Array();//商品数量数组
            for(var i = 0; i < lang; i++){//循环获取复选框的value值和商品数量文本框的value值
                var nm = n_pre+i.toString();
                var stmp = document.getElementById(nm).value; 
                if(stmp  == '' || isNaN(stmp)){
                    alert('不允许为空、必须为数字');//对商品数量文本框判断
                    document.getElementById(nm).select();
                    return false;
                }
                snd[i] = stmp;
                var ftmp = form.chk[i].value;
                fst[i] = ftmp;
            }
        }
        var url = 'test.php?fst='+fst+'&snd='+snd;
        alert(url);
        xmlhttp.open("GET",url,true);
        xmlhttp.onreadystatechange = updatecar;//调用updatecar函数
        xmlhttp.send(null);
    }
    function updatecar(){//对xmlhttp对象返回值进行处理
        if(xmlhttp.readyState == 4){
            var msg = xmlhttp.responseText;
                if(msg == '1'){
                    location='index.php';
                }else{
                    alert('操作失败'+msg);
                }
        }
    } 

     实现显示订单代码:

    // 显示订单
    function formset(form){
    var uid = form.uid.value;//获取订单提交人的名称
    var n_pre = 'cnum';                //商品数量文本前缀
        var lang = form.chk.length;     //复选框个数    
        if(lang == undefined){            // 如果复选框只有一个
            var fst = form.chk.value;            //商品id
            var snd = form.cnum0.value;            //购买数量
        }else{// 如果复选框多个        
            var fst= new Array();
            var snd = new Array();        
            for(var i = 0; i < lang; i++){// 循环获取商品数量和商品id
                var nm = n_pre+i.toString();
                var stmp = document.getElementById(nm).value; 
                if(stmp  == '' || isNaN(stmp)){
                    alert('不允许为空、必须为数字');
                    document.getElementById(nm).select();
                    return false;
                }
                snd[i] = stmp;
                var ftmp = form.chk[i].value;
                fst[i] = ftmp;
            }
        }
        alert('test.php?uid='+uid+'&fst='+fst+'&snd='+snd);
        // open('test.php?uid='+uid+'&fst='+fst+'&snd='+snd,'_blank','width=650 height=300',false);
    }
    </script>
    

      

     这里实现数据处理页面的代码参考简单购物车

    如在实现商品删除功能代码如下

    <?php
    session_start(); 
    header ( "Content-type: text/html; charset=UTF-8" );                         //设置文件编码格式
    require("system/system.inc.php");                          //包含配置文件
    /*  xmlhttp返回参数  */
    $reback = '0';
    /*    将传过来的变量以逗号分割    */
    $commid = explode(',',$_GET['rd']);
    /*  更新数据库所需数组    */
    $newshop = array();
    /*    查找当前用户    */
    $sql = "select id,shopping from tb_user where name = '".$_SESSION['member']."'";
    $rst = $admindb->ExecSQL($sql,$conn);
    if($rst==false){
        $reback = '2';
    }else{
        /*    将shopping字段用@分割    */
        if(!empty($rst[0]['shopping'])){
            $tmpshop = array();
            $shopping = explode('@',$rst[0]['shopping']);
            foreach($shopping as $ky => $vl){
                $tmp = explode(',',$vl);
                $boo = false;
                foreach($commid as $value){
                    if($value == $tmp[0]){
                        $boo = true;
                    }
                }
                if(!$boo){
                    $tmpshop[$ky] = $vl;
                }
            }
            if(!empty($tmpshop)){
                $update = "update tb_user set shopping='".implode('@',$tmpshop)."' where name = '".$_SESSION['member']."'";
            }else{
                $update = "update tb_user set shopping='' where name = '".$_SESSION['member']."'";
            }
            $shop = $admindb->ExecSQL($update,$conn);
            if($shop){
                $reback = 1;
            }else{
                $reback = 3;
            }
        }
    }
    echo $reback;
    ?>

    去数据库修改代码如下

    <?php
    session_start(); 
    header ( "Content-type: text/html; charset=UTF-8" );                         //设置文件编码格式
    require("system/system.inc.php");                          //包含配置文件
    $sql = "select id,shopping from tb_user where name = '".$_SESSION['member']."'";
    $rst = $admindb->ExecSQL($sql,$conn);//返回热二维数组
    $reback = '0';
    $changecar = array();
    if(isset($_GET['fst']) && isset($_GET['snd'])){
        $fst = $_GET['fst'];//商品id
        $snd = $_GET['snd'];//商品数量
        $farr = explode(',',$fst);
        $sarr = explode(',',$snd);
        $upcar = array();
        for($i = 0; $i < count($farr); $i++){
            $upcar[$i] = $farr[$i].','.$sarr[$i];
        }
        if(count($farr) > 1){
            $update = "update tb_user set shopping='".implode('@',$upcar)."' where name = '".$_SESSION['member']."'";
        }else{
            $update = "update tb_user set shopping='".$upcar[0]."' where name = '".$_SESSION['member']."'";
        }
        $shop = $admindb->ExecSQL($update,$conn);
        if($shop){
            $reback = 1;
        }else{
            $reback = 2;
        }
    }
    echo $reback;
    ?>

    代码下载链接 附上一句诗句:海到尽头天作岸,山登绝顶我为峰。加油!

  • 相关阅读:
    BZOJ1864: [Zjoi2006]三色二叉树
    2019牛客全国多校训练四 I题 string (SAM+PAM)
    2019杭电多校第二场
    HDU5919 Sequence II(主席树)
    2019牛客全国多校训练三 题解
    2019牛客多校第二场
    2019 杭电多校第一场 题解
    2019 牛客全国多校一
    POJ3261 Milk Patterns(后缀数组)
    POJ1743 Musical Theme (后缀数组 & 后缀自动机)最大不重叠相似子串
  • 原文地址:https://www.cnblogs.com/aten/p/8945382.html
Copyright © 2011-2022 走看看