登录和增删改查

这周主要是做登录和增删改查的页面,通过做页面对最初学习的ajax,sass有了进一步的认识

接下来对页面中出现过的问题做一下汇总

字符串拼接传参

错误原因:如果传入的参数不是纯数字的字符,那么对参数不进行处理会被浏览器解析为变量。然后就会报not defined。

解决方案:

注意:传参是和形参严格对应,形参中有空格,传参也需要加空格,否则传参传不成功

修改功能的实现

在做修改功能时,因为一些小细节,做了挺长时间

//使用a标签,并绑定单击事件,点击的时候触发修改函数
"<a class='mod' href='javascript:void(0)' onclick=
'Modify(\"" + res[i].name + "\",
\"" + res[i].price + "\",
\"" + res[i].desc + "\",
\"" + res[i].typename + "\",
\"" + res[i].typeid + "\",
\"" + res[i]._id + "\")'
 >修改</a>"
//注意传参时的传入形式,加\" "\ 避免解析不成功
//修改菜单
var mod = document.querySelector(".mod")//获取a标签
var modData = document.querySelector(".modData")//获取修改弹窗
//获取HTML中表单的id
var name1 = document.querySelector("#name")
var price1 = document.querySelector("#price")
var desc1 = document.querySelector("#desc")
var typename1 = document.querySelector("#typename")
var typeid1 = document.querySelector("#typeid")
var _id1 = document.querySelector("#_id")
function Modify(name, price, desc, typename, typeid, _id) {
    //点击修改时,传参并让修改弹窗显示
    modData.style.display = "block";
    // 两个名字一样,就可能认为是一个变量
    //避免出现name.value=name的情况
    //将菜品原本的信息传入
        name1.value = name,
        price1.value = price,
        desc1.value = desc,
        typename1.value = typename,
        typeid1.value = typeid,
        _id1.value = _id
}
//弹窗中的修改点击时,实现修改数据,并且弹窗消失
function confirmModBtn() {
    $.ajax({
        type: "post",
        url: "http://118.195.129.130:3000/food/update",
        data: {
            name: name1.value,
            price: price1.value,
            desc: desc1.value,
            typename: typename1.value,
            typeid: typeid1.value,
            _id: _id1.value,
        },
        success: function (data) {
            getDataPage(1, 5)
            console.log("修改成功")
        },
        error: function (err) {
            console.log("操作失败!")
        }
    });
    modData.style.display = "none";//弹窗消失
}
//为取消按钮绑定一个使弹窗隐藏的函数
function cancelBtn() {
    modData.style.display = "none";
}
 <!-- 页面中修改数据的弹窗 -->
        <div class="modData">
            菜名:&nbsp;&nbsp;<input type="text" placeholder="name" id="name" value=""><br>
            价格:&nbsp;&nbsp;<input type="text" placeholder="price" id="price" value=""><br>
            描述:&nbsp;&nbsp;<input type="text" placeholder="desc" id="desc" value=""><br>
            分类:&nbsp;&nbsp;<input type="text" placeholder="typename" id="typename" value=""><br>
            属性:&nbsp;&nbsp;<input type="text" placeholder="0:面,1:米,2:饮品,3:水果" id="typeid" value=""><br>
            <input type="text" id="_id" value=""><br>
            <div class="btn">
                <button onclick="confirmModBtn()">修改</button>
                <button id="cancel" onclick="cancelBtn()">取消</button>
            </div>
        </div>
 //修改弹窗的样式
.modData{
            width: 400px;
            height: 350px;
            z-index: 9999999999;
            background-color: white;
            position: absolute;
            /* 向右、向下移动父盒子的一半 (偏移量) */
            left: 50%;
            top: 50%;
            /* translate若使用百分比,是相对于自身的比例的位移 */
            transform: translate(-50%, -50%);
            outline: none;
            border-radius: 5px;
            padding: 20px 50px;
            display: none;
            input {
                border: none;
                outline: none;
                border-radius: 2px;
                border: 1px solid rgb(148, 139, 139);
                width: 300px;
                height: 30px;
                margin-top: 20px;
                text-indent: 10px;
            }
            #_id{
                display: none;
            }
            .btn {
                width:320px;
                height: 50px;
                position: absolute;
                display: flex;
                justify-content: space-between;
                align-items: center;
                margin-top: 30px;
                left: 90px;
                button {
                    width: 100px;
                    height: 50px;
                    background-color: rgb(0, 117, 255);
                    border: none;
                    outline: none;
                    border-radius: 2px;
                    color: white;
                    cursor: pointer;
                   
                }
            }
        }

增删改查功能实现时,思路基本一样,特别注意获取,传参,函数调用的顺序等细节。

底部按钮

做的时候也花了较多精力

 <!-- 表格底部的换页按钮 -->
        <div class="pageBtn">
            <span class="shuoMing">共<i id="sumpages">X</i>页&nbsp;&nbsp;&nbsp;5条/页</span>

            <div class="changePage">
                <div class="twoBtn" id="leftBtn">
                    <img src="./img/left.png" alt="" id="leftStop">
                </div>

                <input type="button" class="page" value="1" id="inOne">
                <div class="twoBtn" id="rightBtn">
                    <img src="./img/right.png" alt="" id="rightStop">
                </div>
            </div>
            <div class="change-input">
                到&nbsp;<input type="text" value="1" id="in">&nbsp;页
                <button onclick="goPage()">go</button>
            </div>
        </div>
//查询菜品总数
var len;
//获取HTML中的sumpages
let sumpages = document.getElementById("sumpages");
function totalNum() {
    $.ajax({
        type: "get",
        url: "http://118.195.129.130:3000/food/allpage",
        dataparams: {
        },
        success: function (data) {
            //len即页面中所有数据的个数
            len = data.pages;
            //向页面中显示 Math.ceil(len / 5),除与5,向上取整,即为总页数
            sumpages.innerHTML = Math.ceil(len / 5);
        },
        error: function (err) {
            console.log("操作失败!")
        }
    });
}
//在这儿调用显示共多少页的函数,保证页面显示时,页数就能显示出来
totalNum()

//获取HTML中第X页和左右按钮中间按钮的表单,
//要使用表单中属性value
let input = document.getElementById('in')
let inputOne = document.getElementById('inOne')
document.getElementById("leftBtn").onclick = function () {
    let num = Number(input.value)
    num--
    if (num < 1) {
        //当页数为1时,鼠标光标显示禁用
        leftBtn.style.cursor = "no-drop";
    }
    else {
        getDataPage(num, 5)
        input.value = num
        inputOne.value = num
    }
}
document.getElementById("rightBtn").onclick = function () {
    //当页数为最大时,鼠标光标显示禁用
    let num = Number(input.value)
    num++
    if (num > Math.ceil(len / 5)) {
        rightBtn.style.cursor = "no-drop";
    }
    else {
        getDataPage(num, 5)
        input.value = num
        inputOne.value = num//换页时,value值跟着换
    }
}

这里只罗列了做页面时的部分问题,发现问题解决问题是学习中必不可少的。

猜你喜欢

转载自blog.csdn.net/L19541216/article/details/129770844
今日推荐