会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132413个问题
Python 全系列/第七阶段:网页编程基础/表单 11551楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图基础和URL 11553楼
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 11554楼
Python 全系列/第四阶段:函数式编程和核心特性/生成器、迭代器、动态性 11555楼
Python 全系列/第七阶段:网页编程基础/浏览器模型(BOM) 11556楼
WEB前端全系列/第四阶段:BootStrap框架模块/BootStrap实战 11557楼
Python 全系列/第八阶段:Vue框架/vue框架 11558楼

window.onload = function() {
    waterFlow();
    // 准备上拉加载的数据
    var dataImage = {
        data: [
            { src: "./images/1.jpeg" },
            { src: "./images/2.jpeg" },
            { src: "./images/3.jpeg" },
            { src: "./images/4.jpeg" },
            { src: "./images/5.jpeg" },
            { src: "./images/6.jpeg" },
            { src: "./images/7.jpeg" },
            { src: "./images/8.jpeg" },
            { src: "./images/9.jpeg" },
            { src: "./images/10.jpeg" },
            { src: "./images/11.jpg" },
        ]
    };
    window.onscroll = function() {
        if (checkReachBottom()) {
            console.log("hhh");
            var parentContainer = document.querySelector(".container");
            for (var i = 0; i < dataImage.data.length; i++) {
                var img = document.createElement("img");
                img.setAttribute("src", dataImage.data[i].src);
                var boximg = document.createElement("div");
                boximg.setAttribute("class", "boximg");
                boximg.appendChild(img);
                var box = document.createElement("div");
                box.setAttribute("class", "box");
                box.appendChild(boximg);
                parentContainer.appendChild(box);

            }
            // 新加载的数据要添加瀑布流效果
            waterFlow();
        }
    }
};
// 1. 动态设置页面左右居中
function waterFlow() {
    // 获取父级容器
    var parentContainer = document.querySelector(".container");
    // console.log(parentContainer);
    //获取所有子元素
    var allChild = document.querySelectorAll(".box");
    // console.log(allChild);
    //获取屏幕宽度
    var screenWidth = document.documentElement.clientWidth;
    //获取一个图片容器的宽度
    var childWidth = allChild[0].offsetWidth;
    //计算屏幕水平方向最多能摆放的图片个数
    var rowsNum = Math.floor(screenWidth / childWidth) - 1;
    // 让左右居中
    parentContainer.style.cssText = "width:" + rowsNum * childWidth + "px;margin:0 auto;";

    getMinHeightOfCols(allChild, rowsNum);
};


// 2. 动态设置图片位置
function getMinHeightOfCols(allChild, rowsNum) {
    //存储每一列的高度
    var colsHeightArr = [];
    for (var i = 0; i < allChild.length; i++) {
        // 判断取出第一行的图片,获取图片对应的高度,放入到数组中
        if (i < rowsNum) { //i=6
            // 获取当前图片的高度
            colsHeightArr[i] = allChild[i].offsetHeight;
        } else {
            // 获取列高度最小的值
            var minHeightOfCols = Math.min.apply(null, colsHeightArr);
            // 获取最小值对应的下标
            var minHeightOfIndex = colsHeightArr.indexOf(minHeightOfCols);
            // 摆放第二张图片的位置
            allChild[i].style.position = "absolute";
            allChild[i].style.top = minHeightOfCols + "px";
            allChild[i].style.left = allChild[minHeightOfIndex].offsetLeft + "px";
            // 高度合并
            colsHeightArr[minHeightOfIndex] = colsHeightArr[minHeightOfIndex] + allChild[i].offsetHeight;

        }
    }
};

// 3. 判断页面触底
// 逻辑:滚动高度+视口高度=文档总高度
// 业务:滚动高度+视口高度>文档总高度-100px(或者是最后一张图片的高度)
function checkReachBottom() {
    // 获取滚动高度
    var scrollHeight = document.documentElement.scrollTop;
    // 获取视口高度
    var pageHeight = document.documentElement.clientHeight;
    // 获取最后一个元素
    var allChild = document.querySelectorAll(".box");
    var lastChildTop = allChild[allChild.length - 1].offsetTop; //最后一个元素
    return lastChildTop < pageHeight + scrollHeight ? true : false;
}

老师,为什么我把网页缩小,上拉加载就能成功,网页最大化不行呢?

WEB前端全系列/第二阶段:JavaScript编程模块/DOM模型 11559楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 11560楼

老师,为啥我的控制台不答应监听相关的内容,我写了触发监听的代码,也配置了信息,当我请求的时候控制台没有反应

@WebServlet("/attr.do")
public class ServletContextAttrListenerServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        servletContext.setAttribute("key","itBz");
        servletContext.setAttribute("key","SxtIt");
        servletContext.removeAttribute("key");
    }
}
public class ServletContextAttrListener implements ServletContextAttributeListener {
    /**
     * 向ServletContext对象中添加属性时会触发该监听方法,并将
     * ServletContext对象传递到该方法中。触发事件的方法
     * servletContext.setAttribute("key","value")。
     * @param scae
     */
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("------------------Start Added----------------------");
        System.out.println("name: "+scae.getName()+"value: "+scae.getValue());
        System.out.println(scae.getServletContext());
        System.out.println("------------------End Added----------------------");
    }


com.itbaizhan.listener.ServletContextAttrListener

image.png

JAVA 全系列/第五阶段:JavaWeb开发/Servlet技术详解 11563楼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script>

        /**生成验证码*/
        var ran;

        function YZM() {

            //生成随机四位整数
            ran = Math.floor(Math.random() * 9000 + 1000);

            //获取span对象
            var span = document.getElementById("yzm_span");
            span.innerText = ran;
        }

        /**校验用户名方法*/
        function checkName() {

            //汉字的正则表达式
            var reg = /^[\u4e00-\u9fa5]{3,6}$/;
            return check("uname", reg);
        }

        /**校验密码方法*/
        function checkPwd() {
            //密码的正则表达式
            var reg = /^\d{3,6}$/;
            return check("pwd",reg);
        }

        /**校验邮箱方法*/
        function checkEmail() {
            //邮箱的正则表达式
            var reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
            return check("email",reg)
        }

        /**校验手机号方法*/
        function checkPhone() {
            var reg = /^\d{11}$/;
            return check("phone",reg)
        }

        /**提取公共部分*/
        function check(id, reg) {
            //获取对象
            var ob = document.getElementById(id);

            //获取value值
            var val = ob.value;

            //获取alt值
            var alt = ob.alt;

            //获取span对象
            var span = document.getElementById(id + "_span");

            if (val == null || val == "") {
                span.innerText = "×" + alt + "不能为空";
                span.style.color = "red";
                return false;
            } else if (reg.test(val)) {
                span.innerText = "√" + alt + "合法";
                span.style.color = "green";
                return true;
            } else {
                span.innerText = "不合法";
                span.style.color = "red";
                return false;
            }
        }

        /**校验性别*/
        function checkSex() {
            //获取所有性别对象
            var sex = document.getElementsByName("sex");

            //获取span对象
            var span = document.getElementById("sex_span");

            for (var i in sex) {
                if (sex[i].checked){

                    span.innerText="性别选择成功";
                    span.style.color="green";

                    return true;
                }
            }

            span.innerText="请选择性别";
            span.style.color="red";
            return false;
        }

        /**校验籍贯*/
        function checkAddress() {
            var sel = document.getElementById("sel").value;
            var span = document.getElementById("sel_span");

            if (sel==0) {
                span.innerText="请选择籍贯";
                span.style.color="red";
                return false;
            } else {
                span.innerText="籍贯选择成功";
                span.style.color="green";
                return true;
            }
        }

        /**校验验证码*/
        function checkYZM() {
            //获取输入的验证码
            var yzm = document.getElementById("yzm").value;

            //获取span标签
            var span = document.getElementById("yzm2_span");

            if (yzm==ran) {
                span.innerText="验证码正确";
                span.style.color="green";
                return true;
            } else {
                span.innerText="验证码不正确";
                span.style.color="red";
                return false;
            }
        }

        /**是否同意协议*/
        function checkAgree() {
            //同意框
            var check = document.getElementById("check");

            //提交
            var sub = document.getElementById("sub");

            sub.disabled=!check.checked;
        }

        /**总体判断*/
        function zong() {
            var flag=checkName()&&checkPwd()&&checkEmail()&&checkPhone()&&checkYZM()&&checkAgree()&&checkAddress()&&checkSex();
            return flag;
        }


        /*
          * 正则表达式:
          *
          * 正则表达式是对于数据格式进行一定的规范限制
          *
          *
          * ^:开始
          * [0-9]  [a-z A-Z] :数字  字母
          *
          * {2,4} :段域 至少是2位  最多是4位
          * {3}:指定范围就是3位
          * {2,}:至少是2位
          *  $:结束
          *
          * \d:[0-9]
          *
          * \w[0-9 a-z A-Z]
          *
          * */

    </script>
</head>
<body>
<center>
    <h3>注册页面</h3>
    <hr/>
    <form action="" method="get" onsubmit="return zong()">
        <table>
            <tr height="35px">
                <td width="150px">用户名:</td>
                <td width="500px">
                    <input type="text" name="uname" id="uname" alt="用户名" onblur="checkName()"/>
                    <span id="uname_span">用户名必须是3-5个汉字</span>
                </td>
            </tr>
            <tr height="35px">
                <td>密码:</td>
                <td>
                    <input type="password" name="pwd" id="pwd" alt="密码" onblur="checkPwd()">
                    <span id="pwd_span"></span>
                </td>
            </tr>
            <tr height="35px">
                <td>手机号:</td>
                <td>
                    <input type="text" name="phone" id="phone" alt="手机号" onblur="checkPhone()"/>
                    <span id="phone_span"></span>
                </td>
            </tr>
            <tr height="35px">
                <td>邮箱:</td>
                <td>
                    <input type="text" name="email" id="email" alt="邮箱" onblur="checkEmail()"/>
                    <span id="email_span"></span>
                </td>
            </tr>
            <tr height="35px">
                <td>性别:</td>
                <td>
                    男:<input type="radio" name="sex" value="1" onclick="checkSex()"/>
                    女:<input type="radio" name="sex" value="0" onclick="checkSex()">

                    <span id="sex_span"></span>
                </td>
            </tr>
            <tr height="35px">
                <td>爱好;</td>
                <td>
                    <input type="checkbox" name="fav" value="1"/>唱歌
                    <input type="checkbox" name="fav" value="2"/>睡觉
                    <input type="checkbox" name="fav" value="3"/>LOL<br/>
                    <input type="checkbox" name="fav" value="4"/>旅游
                    <input type="checkbox" name="fav" value="5"/>看电影
                    <input type="checkbox" name="fav" value="6"/>听音乐
                </td>
            </tr>
            <tr height="35px">
                <td>籍贯:</td>
                <td>
                    <select name="address" id="sel" onchange="checkAddress()">
                        <option value="0">--请选择--</option>
                        <option value="1">河南</option>
                        <option value="2">湖南</option>
                        <option value="3">海南</option>
                        <option value="4">云南</option>

                    </select>

                    <span id="sel_span"></span>
                </td>
            </tr>
            <tr height="35px">
                <td>验证码:</td>
                <td>
                    <input type="number" id="yzm" onblur="checkYZM()"/>
                    <input type="button" id="hq" value="点击获取验证码" onclick="YZM()"/>
                    <span id="yzm_span"></span>
                    <span id="yzm2_span"></span>
                </td>
            </tr>
            <tr height="35px">
                <td>个人介绍:</td>
                <td>
                    <textarea name="intro" rows="8" cols="30"></textarea>
                </td>
            </tr>
            <tr height="35px">
                <td colspan="2" align="center">
                    <input type="checkbox" id="check" onclick="checkAgree()">是否同意协议
                </td>
            </tr>
            <tr height="35px">
                <td colspan="2" align="center">
                    <input type="submit" id="sub" value="注册" disabled="true">
                </td>
            </tr>
        </table>
    </form>
</center>
</body>
</html>

image.png

籍贯这里不选择的话也能提交 有没有什么方法 在提交的时候能提醒选择籍贯或者报错

JAVA 全系列/第四阶段:网页编程和设计/Javascript 语言(旧) 11565楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637