首页 > 技术文章 > JS操作BOM和DOM对象(三)

javaconner 2021-06-19 20:43 原文

1、操作BOM对象

  • BOM(Browser Object Model)的核心对象是window,它表示浏览器的一个实例。
  • window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。这意味着在网页中定义的任何一个对象、变量和函数,都以 window作为其Global对象,因此有权访问parseInt()等方法。
  • 如果页面中包含框架,则每个框架都拥有自己的 window对象,并且保存在frames集合中。在frames集合中,可以通过数值索引(从0开始,从左至右,从上到下) 或者框架的名称来访问相应的window对象。

说明:下面测试大多是在浏览器控制台

1.1、window对象

window.innerHeight // 获取浏览器内部高度
170
window.outerHeight // 获取浏览器外部总高度
680
window.innerWidth // 获取浏览器内部宽度
1280
window.outerWidth // 获取浏览器外部总宽度
1280
window.open('https://www.baidu.com','_blank') // 打开一个窗口:url 打开的地方
window.close() // 关闭浏览器

小示例:

/*
(1)消息框:alert, 常用。
   alert() 方法用于显示带有一条指定消息和一个 OK 按钮的警告框。
(2)输入框:prompt,返回提示框中的值。
   prompt() 方法用于显示可提示用户进行输入的对话框。
   参数(可选):
   		第一个参数:要在对话框中显示的纯文本。
   		第二个参数:默认的输入文本。
(3)确认框:confirm,返回 true/false.
confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框。

*/
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style type="text/css">
    #aa{
        border: 1px solid red;
        height: 100px;
    }
</style>
<body>
<div id="aa">
    This is a div
</div>
<button onclick="testAlert();">警告</button>
<button onclick="testConfirm();">修改</button>
<button onclick="testPrompt();">输入</button>
<script type="text/javascript">
    // 1.警告框
    function testAlert(){
        alert('警告框!!!');
    }

    /*
        2.输入框
        返回值:输入的内容
    **/
    function testPrompt(){
        var item = prompt('请输入年龄'); // item得到输入的值
        // console.log(item)
        // alert(prompt('请输入年龄',18)); // 将输入的值输出
    }

    /*
        3.确认框
        返回值:boolean(true|false)
    **/
    function testConfirm(){
        var result = confirm('真的要改吗?');
        if(result){
            var ele = document.getElementById("aa");
            ele.style.color="red";
            ele.innerHTML="<span>fdsfsd</span>";
        }else{
            alert("没事别瞎点。。。");
        }
    }
</script>
</body>
</html>

1.2、navigator

navigator封装了浏览器信息

navigator.appName
"Netscape"
navigator.appVersion
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"
navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"
navigator.platform
"Win32"
  • 大多数时候,我们不会使用navigator对象,因为会被人为修改!
  • 不建议使用这些属性来判断和编写代码

1.3、screen

// 获取屏幕宽高 单位px
screen.width
1280
screen.height
720

1.4、location

// location的一些重要属性和方法
host: "www.baidu.com" // 主机
href: "https://www.baidu.com/" // 当前指向的位置
protocol: "https:"  // 协议
reload: ƒ reload() // 重新加载页面

// 设置新的地址
location.assign('https://www.cnblogs.com/javaconner/')

示例:

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

<script type="text/javascript">
    function openBaidu(){
        // 没有历史记录,用新的文档替换当前文档
        // window.location.replace("http://www.baidu.com");
        // console.log(window.location.href); // 获取完整的url
        window.location.href = "http://www.baidu.com";
    }
</script>
<body>
    <input type="text"  value="" />
    <input type="button" value="刷新" onclick="window.location.reload();" />
    <input type="button"  value="百度" onclick="openBaidu();" />
</body>
</html>

1.5、document

document 代表当前页面,HTML DOM文档树

修改页面标题

document.title
"百度一下,你就知道"
document.title = 'conner'
"conner"

获取具体的文档树节点

<dl id="dl">
    <dt>Java</dt>
    <dd>JavaSE</dd>
    <dd>JavaEE</dd>
</dl>

<script>
    let dl = document.getElementById('dl');
</script>

获取cokkie

document.cookie
"....."

1.6、history

history 代表浏览器的历史记录

history.back() // 回退
history.forward() // 前进

2、操作DOM对象

  • DOM(Document Object Model)文档对象模型 要实现页面的动态交互效果,BOM操作远远不够,需要操作 html 才是核心。
  • 如何操作 htm,就是 DOM。简单的说,DOM提供了用程序动态控制 html 接口。DOM即文档对象模型描绘了一个层次化的节点树,运行开发 人员添加、移除和修改页面的某一部分。DOM处于javascript 的核心地位上。
  • 每个载入浏览器的HTML文档都会成为Document 对象。Document 对象使我们可以从脚本中对 HTML 页面 中的所有元素进行访问。
  • Document 对象是Window 对象的一部分,可通过 window.document 属性对其进行访问。

image-20210617192541763

2.1、节点

加载 HTML 页面时,Web 浏览器生成一个树型结构,用来表示页面内部结构。DOM 将这种树型结构理解为由节点组成,组成一个节点树。对于页面中的元素,可以解析成以下几种类型的节点:

节点类型 HTML内容
文档节点 文档本身
元素节点 所有的HTML元素
属性节点 HTML元素内的属性
文本节点 元素内的文本
注释节点 HTML中的注释

2.2、操作元素的节点

  • 当HTML文档在被解析为一颗DOM树以后,里面的每一个节点都可以看做是一个一个的对象,我们称为DOM对象
  • 查找到某一个或者一类节点对象,可以创建某种节点对象,可以在某个位置添加节点对象,甚至可以动态地删除节点对象,这些操作可以使我们的页面看起来有动态的效果,后期结合事件使用,就能让我们的页面在特定时机、特定的事件下执行特定的变换。

获取节点

在进行增、删、改的操作时,都需要指定到一个位置,或者找到一个目标,此时我们就可以通过Document对 象提供的方法,查找、定位某个对象(也就是我们说的节点)。

注意:操作 DOM 必须等节点初始化完毕后,才能执行。

两种处理方式:

(1)把 script 调用标签移到html末尾即可;

(2)使用onload事件来处理JS,等待html 加载完毕再加载 onload 事件里的 JS

window.onload = function () { // 等加载html后执行};

获取方式如下:返回的集合都可以通过索引(以 0 为起始位置)来访问。

方法 描述
getElementById() 根据id获取dom对象,如果id重复,那么以第一个为准
getElementsByTagName() 根据标签名获取dom对象集合
getElementsByClassName() 根据样式名获取dom对象数集合
getElementsByName() 根据name属性值获取dom对象集合,常用于多选获取值
parentElement 获取元素的父元素
children 获取元素的所有的子元素集合

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p id="p1" class="para">这是一个段落<span>文本</span></p>
    <p id="p1" class="para">这又是一个段落</p>
    <input type="text" name="txt"/>
    <input type="checkbox" name="hobby" value="游泳"/>游泳
    <input type="checkbox" name="hobby" value="篮球"/>篮球
    <input type="checkbox" name="hobby" value="足球"/>足球
    <hr/>
    <a href="javascript:void(0)" onclick="testById()">按照id获取</a>
    <a href="javascript:void(0)" onclick="testByName()">按照name获取</a>
    <a href="javascript:void(0)" onclick="testByTagName()">按照标签名获取</a>
    <a href="javascript:void(0);" onclick="testByClass();">按照class获取</a>
</body>

<script type="text/javascript">
    // 按照id获取元素
    function testById() {
        // 返回单个对象
        var p = document.getElementById("p1");
        console.log(p);
        // 表示获取元素开始标签和结束标签之间的html结构
        console.log(p.innerHTML);
        console.log(p.innerText); // 表示获取标签之间的普通文本
    }

    // 按照name获取元素
    function testByName() {
        // 对象集合
        var ho = document.getElementsByName("hobby");
        console.log(ho);
        for (var i = 0; i <= ho.length - 1; i++) {
            console.log(ho[i].value);
        }
    }

    // 按照标签名获取元素
    function testByTagName() {
        // 对象集合
        var inputArr = document.getElementsByTagName("input");
        for (var i = 0; i < inputArr.length; i++) {
            if (inputArr[i].type === "text") {
                console.log("text类型");
            } else if (inputArr[i].type === "checkbox") {
                if (inputArr[i].checked) {
                    console.log(inputArr[i].value);
                }
            }
        }
    }

    // 按照class属性获取元素
    function testByClass() {
        // 对象集合
        var ps = document.getElementsByClassName("para");
        console.log(ps[0].innerHTML);
        ps[0].innerHTML += "这是一段新的文本";
    }
</script>
</html>

说明:href="javascript:void(0)":伪协议,表示不执行跳转,而执行指定的点击事件。

创建节点和插入节点

很多时候我们想要在某个位置插入一个新的节点,此时我们首先需要有一个节点存在,可以通过以下几种方式 创建新节点。

创建节点

方法 描述
createElement() 创建一个新的节点,需要传入节点的标签名称,返回创建的元素对象
createTextNode() 创建一个文本节点,可以传入文本内容
innerHTML 可以插入超文本
innerText 可以插入文本

注意:后边两种适用于选中元素的内容为空时,因为有内容的话会覆盖,而前两种是追加元素,不会对原来内容造成影响

插入节点

方法 描述
write() 将任意的字符串插入到文档中
appendChild() 向元素中添加新的子节点,作为最后一个子节点
insertBefore() 向指定的已有的节点之前插入新的节点newItem:要插入的节点exsitingItem:参考节点需要参考父节点

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <button onclick="addPara();">添加段落</button>
    <button onclick="addImg();">添加图片</button>
    <button onclick="addTxt();">添加文本框</button>
    <button onclick="addOptions()">添加选项</button>
    <select name="music">
        <option value="-1">你心内的一首歌</option>
        <option value="0">南山南</option>
        <option value="1">喜欢你</option>
    </select>
    <hr />
    <div id = "container"></div>
</body>

<script type="text/javascript">
    // 添加p节点
    function addPara(){
        // 获取容器
        var container =document.getElementById("container");
        // 创建段落<p></p>
        var p =document.createElement('p');
        // 第一种方式
        // 创建文本节点
        var txt=document.createTextNode("以后的你会感谢现在努力的你");
        // 将txt节点追加到p节点中
        p.appendChild(txt);
        // 将p节点追加到container节点中
        container.appendChild(p);
        /*
        // 第二种方式
        // 向p节点中添加内容
        p.innerHTML = "以后的你会感谢现在努力的你";
        // 将p节点追加到container节点中
        container.appendChild(p);
        */
        /*
        // 第三种方式
        // 将字符串类型的p标签内容添加到container中,不会添加多次
        var str = "<p>以后的你会感谢现在努力的你</p>";
        container.innerHTML = str;
        */
    }

    // 添加图片
    function addImg(){
        // 创建图片
        var img = document.createElement("img") ;
        /*
        // 设置属性第一种方式
        // 设置img标签的src属性
        // img.src ="http://www.baidu.com/img/bd_logo1.png";
        */
        // 设置属性第二种方式
        // setAttribute() 方法添加指定的属性,并为其赋指定的值。
        // 设置img的src属性
        img.setAttribute('src','http://www.baidu.com/img/bd_logo1.png');
        img.style.width = '300px';
        img.style.height = '200px';
        // 获取容器
        var container =document.getElementById("container");
        // 将img节点追加到container中。
        container.appendChild(img);
    }

    // 添加文本框
    function addTxt(){
        // 创建文本框
        var txt =document.createElement("input");
        /*
        // 设置类型第一种方式
        txt.type = "text";
        txt.value = "添加成功";
        */
        // 设置类型第二种方式
        txt.setAttribute('type', 'text');
        txt.setAttribute('value', '添加成功');
        /*
        * txt.type = 'password'
        * txt.value = '123'
        */
        // 获取容器
        var container =document.getElementById("container");
        // 将txt节点追加到container中。
        container.appendChild(txt);
    }

    // 添加下拉框的选项
    function addOptions(){
        // 第一种方式
        /*
        // 创建下拉项
        var option = document.createElement("option") ;
        option.value = "2" ;
        option.text = "油菜花" ;
        // 获取下拉框
        var sel = document.getElementsByTagName("select")[0];
        // 添加 下拉项
        sel.appendChild(option);
        */
        // 第二种方式:
        // var option = document.createElement("option") ;
        // option.value = "2" ;
        // option.text = "不该" ;
        // 获取下拉框
        // var sel = document.getElementsByTagName("select")[0];
        // 添加下拉项
        // sel.options.add(option);
        // 第三种方式: 添加下拉项
        var sel = document.getElementsByTagName("select")[0];
        sel.innerHTML += "<option value = '2'>英雄</option>" ;
    }
</script>

</html>

删除节点

删除多个节点的时候,children是在时刻变化的,删除节点的时候一定要注意!

方法 描述
removeChild() 从元素中移除子节点

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script type="text/javascript">
    function delNode(){
        var programmer =document.getElementById("programmer");
        // 从父元素中删除节点,获取要删除对象的父元素,然后从父元素中删除该对象
        programmer.parentNode.removeChild(programmer);
    }
</script>
<body>
    <span id="programmer">程序猿</span>
    <a href="javascript:void(0)" onclick="delNode();">删除</a>
</body>
</html>

3、操作表单

表单是我们页面向后台传输数据的一种非常常见的方式,在进行数据发送(请求发出)之前,我们应该现在页面进行 一系列数据合法性的验证,节省不必要的错误数据的传输,以及提高用户的体验度。

3.1、获取表单

前两种常用

1、document.表单名称 
2、document.getElementById(表单id); 
3、document.forms[表单名称] 
4、document.forms[索引]; //从 0 开始

示例:

<body>
     <form id='myForm' name="myForm" action="" method="post"></form>
     <form id='myForm2' name="myForm2" action="" method="post"></form>
</body>
<script>
    //四种方式
    var form =document.getElementById("myForm");
    form =document.myForm;
    form =document.forms["myForm"];
    form =document.forms[0];
    console.log(form);
</script>

3.2、获取表单元素

获取input元素

如 text password hidden textarea等,前两种常用。

1)、通过 id 获取:document.getElementById(元素 id);
2)、通过 form.名称形式获取: myForm.元素名称;    name属性值
3)、通过 name 获取 :document.getElementsByName(name属性值)[索引] // 从0开始
4)、通过 tagName 数组 :document.getElementsByTagName('input')[索引] // 从0开始
<body>
    <form id='myForm' name="myForm" action="" method="get">
        姓名:<input type="text" id="uName" name="uName" value="zs"/><br />
        密码:<input type="password" id="uPwd" name="uPwd" value="1234"/><br />
        <input type="hidden" id="uno" name="uno" value="隐藏域" />
        个人说明:<textarea name="intro"></textarea>
        <button type="button" onclick="getTxt();" >获取元素内容</button>
    </form>
</body>
<script>
    function getTxt(){
        var uno = document.getElementById("uno");
        var uName = myForm.uName;
        console.log(uName + "--------");
        var uPwd = document.getElementsByTagName('input')[1] ;
        var intro = document.getElementsByName("intro")[0];
        console.log(uno.value +","+ uName.value +","+ uPwd.value +","+ intro.value);
    }
</script>

获取单选按钮

前提:将一组单选按钮设置相同的name属性值

1)获取单选按钮组:

document.getElementsByName("name属性值");

(2)遍历每个单选按钮,并查看单选按钮元素的checked属性

  • 若属性值为true表示被选中,否则未被选中
  • 选中状态设定: checked='checked' 或 checked='true' 或 checked
  • 未选中状态设定: 没有checked属性或 checked='false
<body>
    <form action="" name="myForm">
        <input type="text" name="inputName" value="aaa" />
        <input type="radio" name="rad" value="1" /> 1
        <input type="radio" name="rad" value="2"  /> 2
        <button type="button" onclick="getTxt();" >获取元素内容</button>
    </form>
</body>

<script type="text/javascript">
    function getTxt() {
        var radios = document.getElementsByName('rad');
        //radios[0].checked = 'checked'
        for(var i = 0; i<radios.length; i++){
            console.log(radios[i].checked + '---' + radios[i].value)
        }
    }

</script>

获取多选按钮

操作方式与单选同理,不同之处在于可以多选

<body>
    <form action="" method="post">
        <input type="checkbox" name="test" value="1">1
        <input type="checkbox" name="test" value="2">2
        <input type="checkbox" name="test" value="3">3
        <button type="button" onclick="getTxt();" >获取元素内容</button>
    </form>
</body>

<script>
    function getTxt() {
        var test = document.getElementsByName("test");
        var txt = "";
        for (var i = 0;i < test.length; i++){
            if(test[i].checked){
                txt += test[i].value+",";
            }
        }
        txt = txt.substr(0,txt.length-1);
        console.log(txt);
    }

</script>

获取下拉框选项

  1. 获取 select 对象:

    •   var uFrom = document.getElementById("uFrom");
      
  2. 获取选中项的索引:

    •   var idx = uFrom.selectedIndex;
      
  3. 获取选中项 options 的 value属性值:

    •   var val = uFrom.options[idx].value;
        /*	
            注意:当通过options获取选中项的value属性值时,
            若没有value属性,则取option标签的内容
            若存在value属性,则取value属性的值
        */
      
  4. 获取选中项 options 的 text:

    •   var txt = uFrom.options[idx].text;
      

选中状态设定:selected='selected'、selected=true、selected

未选中状态设定:不设selected属性

<body onload="init()">
<form id='myForm' name="myForm" action="#" method="post">
    来自:
    <select id="uFrom" name="uFrom">
        <option value="-1" >请选择</option>
        <option value="0">北京</option>
        <option value="1">上海</option>
        <option value="2">广东</option>
    </select><br />
    <button type="button" id="sub" name="sub">提交</button>
</form>
</body>
<script>
    function init () {
        var sub = document.getElementById("sub");
        sub.onclick = function () {
            //获取select对象
            var uFrom = document.getElementById("uFrom");
            console.log("表单对象:" + uFrom);
            //获取选中的索引
            var idx = uFrom.selectedIndex;
            console.log("选中项的索引值:" + idx);
            //获取选中项的value值
            var val = uFrom.options[idx].value;
            console.log("选中项的value属性值:" + val);
            //获取选中项的text
            var txt = uFrom.options[idx].text;
            console.log("选中项的text:" + txt);
        }
    }
</script>

3.3、提交表单

  1. 使用普通button按钮+onclick事件+事件中编写代码:

    • 获取表单.submit();
  2. 使用submit按钮 + onclick="return 函数()" +函数编写代码:

    • 最后必须返回:return true|false;
  3. 使用submit按钮/图片提交按钮 + 表单onsubmit="return 函数();" +函数编写代码:

    • 最后必须返回:return true|false;
<body>
<form id='myForm1' name="myForm2" action="#" method="get" onsubmit="return onSub();">
    <input  name="test"  id="uName"/><span id="msg"></span><br />
    <!--通过js事件:sub()提交表单-->
    <input type="button" onclick="sub();" value="提交表单1" />
    <input type="submit" onclick="return sub2();" value="提交表单2" />
    <input type="submit" value="提交onSubmit" /><br />
    <input type="image" src="img/u=71331624,2965806045&fm=23&gp=0.jpg"
           width="60px" height="40px" />
</form>
</body>

<script type="text/javascript">
    // input的type=button,调用submit()方法提交
    function sub(){
        document.myForm2.submit();
    }
    // 进行校验,返回值为true才能提交
    function sub2(){
        var uName = document.getElementById("uName");
        var val  = uName.value;
        if(val.length>0){
            return true; // 提交
        }
        document.getElementById("msg").innerHTML = "不能空着啊!!!";
        document.getElementById("msg").style.color="red";
        return false;  // 不提交
    }
    // onsubmit事件提交
    function onSub () {
        var uName = document.getElementById("uName");
        var val  = uName.value;
        if(val.length>0){
            return true; // 提交
        }
        document.getElementById("msg").innerHTML = "填写点儿东西呗!(ˉ▽ ̄~) 切~~";
        document.getElementById("msg").style.color="red";
        return false; // 不提交
    }
</script>

3.4、表单验证

<body>
<form id='myForm' name="myForm">
    姓名:<input type="text" id="uName" name="uName" /><br />
    密码:<input type="password" id="uPwd" name="uPwd" /><br />
    年龄:<input type="radio" name="uAge" value="0" checked="checked"/>小屁孩
    <input type="radio" name="uAge" value="1"/>你懂得 <br />
    爱好:<input type="checkbox" name="uFav" value="篮球"/>篮球
    <input type="checkbox" name="uFav" value="爬床"/>爬床
    <input type="checkbox" name="uFav" value="代码"/>代码<br />
    来自:<select id="uFrom" name="uFrom">
    <option value="-1" selected="selected">请选择</option>
    <option value="0">北京</option>
    <option value="1">上海</option>
</select><br />
    <div id="validate" style="color: red;"></div>
    <button type="submit" onclick="return checkForm();">提交</button>
    <button type="reset" onclick="resetForm();">重置</button>
</form>
</body>
<script>
    /**
     要求:
     1、验证用户名
     1)不能为空
     2)长度为 6-12 位
     2、验证密码
     1)不能为空 *
     2)长度为 6-12 位
     3)不能包含用户名
     3、年龄: 必须选择 你懂得
     4、爱好: 必须选择一项
     5、来自: 必须选择一项
     满足以上条件
     1、弹出所有的内容
     2、提交表单
     否则
     1、说明错误原因
     2、不能提交表单
     */

    // 通过id属性值得到dom对象
    function $(id) {
        return document.getElementById(id);
    }
    // 重置表单所有元素 注意函数不能命名为 clear reset 等
    function resetForm(){
        // 获取说明 div
        var validate =$('validate');
        validate.innerHTML ="";
    }
    // 表单校验
    function checkForm () {
        var flag = true;
        // 获取说明 div
        var validate = $('validate');
        validate.innerHTML = "";
        // 1、验证用户名
        // 1)、获取用户名的值
        var uName = $('uName').value;
        // 1)不能为空 -->后期正则处理
        // 2)长度为 6-12 位
        if ("" === uName || uName.length === 0) {
            validate.innerHTML += "*用户名不能为空</br>";
            flag = false;
        } else if (uName.length < 6 || uName.length > 12) {
            validate.innerHTML += "*用户名长度在 6-12 位</br>";
            flag = false;
        }
        // 2、验证密码
        var uPwd = $('uPwd').value;
        // 1)不能为空
        // 2)长度为 6-12 位
        // 3)不能包含用户名
        if ("" === uPwd || uPwd.length === 0) {
            validate.innerHTML += "*密码不能为空</br>";
            flag = false;
        } else if (uPwd.length < 6 || uPwd.length > 12) {
            validate.innerHTML += "*密码长度在 6-12 位</br>";
            flag = false;
        } else if (uName.length > 0 && uPwd.indexOf(uName) >= 0) {
            validate.innerHTML += "*密码中不能出现用户名</br>";
            flag = false;
        }
        // 3、年龄: 必须选择 你懂得
        var ageGroup = document.getElementsByName("uage");
        var age;
        for (var i = 0; i < ageGroup.length; i++) {
            if (ageGroup[i].checked) {
                age = ageGroup[i].value;
            }
        }
        if (age === 0) {
            flag = false;
            validate.innerHTML += "*小屁孩,妈妈喊你回家</br>";
        }
        // 4、爱好: 必须选择一项
        var uFav = document.getElementsByName("uFav");
        var favStr = "";
        for (i = 0; i < uFav.length; i++) {
            if (uFav[i].checked) {
                favStr += uFav[i].value + ",";
            }
        }
        favStr = favStr.substr(0, favStr.length - 1);
        if (favStr.length < 1) {
            flag = false;
            validate.innerHTML += "*人生真无趣</br>";
        }
        // 5、来自
        var uFrom = $('uFrom');
        var idx = uFrom.selectedIndex;
        var val = uFrom.options[idx].value;
        var valTxt = uFrom.options[idx].text;
        if (-1 === val) {
            flag = false;
            validate.innerHTML += "*你来自火星吗?</br>";
        }
        // 满足以上条件 弹出内容
        if (flag) {
            var str = "";
            str += "您的姓名是:" + uName + "\n";
            str += "您的密码是:" + uPwd + "\n";
            str += "您的年龄是:" + "可以赢取白富美了" + "\n";
            str += "您的爱好是:" + favStr + "\n";
            str += "您来自于:" + valTxt + "\n";
            alert(str);
            // 设置表单提交的地址
            myForm.action = "http://www.baidu.com";
            // 提交表单
            myForm.submit();
            return false;
        } else {
            return false;
        }
    }
</script>

3.5、md5 加密密码,表单优化

<body>
<form id="uForm" action="#" method="post">
    <p>用户名:<input type="text" name="uName"></p>
    <p>密码:<input type="password" id="pwd"></p>
    <input type="hidden" id="md5pwd" name="uPwd">
    <input type="button" onclick="md5Encipher()" value="提交">
</form>
</body>
<!-- MD5工具 -->
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>

<script>

    function md5Encipher() {
        var uForm = document.getElementById('uForm');
        var pwd = document.getElementById('pwd');
        var md5pwd = document.getElementById('md5pwd');

        md5pwd.value = md5(pwd.value);

        uForm.submit();
    }

</script>

效果:

image-20210618193812312

推荐阅读