ASP.NET Web应用系统开发(C#)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 JavaScript

1.4.1 JavaScript概述

JavaScript是目前在Web前端开发领域十分流行且十分重要的一种脚本语言,其功能强大,用途广泛,可以响应浏览器事件、操作HTML元素、制作炫酷特效、验证用户数据、与服务器进行交互甚至进行服务器端编程等。虽然JavaScript语言的学习门槛较低,但限于篇幅,本书仅介绍一些JavaScript的基础知识。

要想在页面中使用JavaScript脚本,必须要有<script>标签,而具体的程序代码既可以在此标签中,也可以来自外部的.js文件。像.css文件一样,我们也推荐将JavaScript代码单独保存在一个独立的.js文件中,这样既使网页的文件结构更加清晰,便于搜索和高度,又可提高代码的复用性。

    <script src="cjs/jquery-3.2.1. min.js"></script>  //引入站内js文件
    <script src="https://unpkg.com/bootstrap@4.2.1/dist/js/bootstrap.min.js"></script>
     //引入站外js文件
    <script>
      window. alert("hello, world! ") //弹出警告框
  </script>

1.4.2 JavaScript的基本语法

JavaScript语法严格区分大小写;一行代码可以用分号(;)表示结束,也可以直接回车换行表示结束;注释方法分为单行注释(//)和多行注释(/*. . . */);其运算符也包括算术运算符、逻辑运算符、比较运算符、赋值运算符等,使用方法与其他编程语言相似。

(1)变量。在JavaScript中,变量可以不用先声明而直接使用;声明而未赋值的变量为undefined;可以看出,JavaScript属于弱类型语言。

创建数组的方法有三种:

①利用Array()函数创建空数组:stu=new Array()。

②利用下标方式直接赋值:stu [0]="张三"。

③利用Array函数创建数组并立即赋值:stu=new Array("张三")。

JavaScript中数组的创建和使用在真实开发中较为常见,一定要深入学习并灵活掌握其用法。

(2)字符串。字符串是JavaScript中比较常见的一类数据类型。其常用属性有:

length:返回字符串长度。

常用方法有:

charAt():返回某一字符或子串的起始位置序号。

indexOf():返回某一位置序号所对应的字符。

replace():字符替换。

split():根据某一字符进行分割,结果为一个数组。

substr(n, l):从第N位开始,获取长度为l的子串。

substring(s, e):获取从第s位到第n位的子串。

我们推荐读者要熟练掌握后4种方法,在真实开发工作中极为常用。

(3)函数。JavaScript中函数的意义与其他语言中函数的意义相同,它把一些JavaScript程序放在一个独立、完整的结构中,用于实现一些特定的功能,并且可以被多个页面重复使用。

函数定义方法:

      function funName(paras) //parasV为形式参数,可有多个。
      {代码块;}

函数调用方法:

      funName(paras) //parasR为实际参数,类型与数量要与形式参数一一对应。

通常情况下,函数要先定义后使用。

(4)条件分支与循环。JavaScript也提供if else语句来实现条件分支,与其他编程语言的用法完全相同,包括:

      if(){. . .}
      if(){. . .}else {. . .}
      if(){. . .}else if(){. . .}else if(){. . .}……else {. . .}

与其他编程语言仍然相同的是,JavaScript也有for循环和while循环,但除此之外它还独有一种for in循环结构,专门用于遍历可序列化的数据,具有较强的实用性。其语法结构为:

for(i in obj){. . .} //obj为可序列化的数据变量(如数组、JSON等), i为循环变量,是每个元素的下标。

上述结构的含义是:从第一个元素开始,依次从obj变量中获取每一个元素的下标,并把此下标值循环地交给循环变量i,然后在循环体中就可以使此下标变量i来完成各类操作。如:

    stu=new Array("张三", "李四", "王五", "赵六");
    lis="";
    for(eachStu in stu){
        lis += "<p>" + stu [eachStu]+ "</p>";
    };
    document. write(lis); //向页面写入数据

一定要注意的是,for in结构中循环变化的是下标,而不是每一个元素。

1.4.3 JSON数据格式

JSON(JavaScript Object Notation, JavaScript对象标记)是一种轻量级的数据交换格式,是JavaScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据,本质上是一个字符串,易于阅读和编写,现在很多Web后端编程语言都能处理JSON数据,如PHP、C#、JAVA、Python等。JSON比XML在多个方面都有突出优势,因此是目前Web上应用最为广泛的数据交互与传输格式。

JSON数据格式的结构特点包括:

①用键值对表示对象;

②相邻的同级数据用逗号分隔;

③用大括号保存对象;

④用方括号保存对象数组;

⑤结构可嵌套。

读者可通过以下示例了解JSON数据格式的结构特点与使用方法。

例1:纯JSON数组,用方括号表示。

      var jsonArr= ["张三", "李四", "王五", "赵六"];  //定义纯json数组
      for(i in jsonArr) //利用for in循环遍历jsono数组元素
      {
          document. write(i+":"+jsonArr [i]+"<br/>"); //将所有元素拼接为一个字
  符串并显示在页面中
      }

例2:多个对象且对象值为单一元素的JSON数据,大括号保存多个对象,每个对象为键值对,整体上类似数据表中的一条记录。

      var jsonObj= {
          "name":"张三",
          "sex":"男",
          "age":100,
      }
      tempStr="姓名:"+jsonObj. name+",性别:"+jsonObj. sex+",年龄:"+jsonObj. age +"<
  br/>"
       /*或者下面这种写法*/
      tempStr="姓名:"+jsonObj [′name′]+",性别:"+jsonObj [′sex′]+",年龄:"+jsonObj
  [′age′]+"<br/>"
  document. write(tempStr)

例3:对象数组,大括号与中括号结合使用,类似数据表中多条记录。

    var jsonObjArr=
    [
        {
            "name":"张三",
            "sex":"男",
            "age":100
        },
        {
            "name":"李四",
            "sex":"女",
            "age":56
        },
        {
            "name":"王五",
            "sex":"男",
            "age":36
        }
    ];
    for(i in jsonObjArr)
    {
        tempStr="姓名:"+jsonObjArr [i][′name′]+",性别:"+jsonObjArr [i][′sex′]+
",年龄:"+jsonObjArr [i][′age′]+"<br/>";
document. write(tempStr)
}

例4:复杂的JSON结构嵌套。最外层是key为data和info的普通对象,data对应的值为对象数组,info对应值为一个字符串。类似于多张数据表(本例可视为有data表和info表),每个数据表中可分别放入不同的数据内容。仍然根据对象的key值分别进行遍历。

      var jsonMultiObj=
        {
          "data":
                  [
                      {
                      "name":"张三", "sex":"男", "age":100

                      },
                      {
                      "name":"李四", "sex":"女", "age":56
                      },
                      {
                      "name":"王五", "sex":"男", "age":36
                      }
                  ],
                "info":"这里有三条人员信息记录。"
              };
            document. write(jsonMultiObj. info+"<br/>"); //读取key为info的值
            for(i in jsonMultiObj. data)//利用for in循环遍历key为data的所有值
              {
          tempStr="姓名:"+jsonMultiObj [′data′]  [i]  [′name′]+",性别:"+jsonMultiObj. data [i][′sex′]+",年龄:"+jsonMultiObj. data [i][′age′]+"<br/>";
          document. write(tempStr)
        }

1.4.4 BOM与DOM

JavaScript语言中的BOM(Browser Object Model,浏览器对象模型)与DOM(Document Object Model,文档对象模型)拥有大量包含丰富属性与方法的子对象,提供了丰富的用户与页面进行交互的功能。

(1)window对象:表示整个浏览器窗口,属于最顶层的BOM。

常用方法:

window. open(); // 打开新窗口。

window. close(); // 关闭当前窗口。

window. alert(); // 弹出警告框。

window. confirm(); // 弹出确认框。

window. print(); //打印当前窗口。

(2)location对象:获取当前页面的url,或者跳转至新页面。

常用属性与方法:

location. href; //获取当前页面的url。

location. href="url"; //页面重定向(跳转至url)。

location. reload(); //重新加载当前URL,即刷新当前页。

location. replace(); //用新文档替换当前文档,相当于页面跳转。

(3)document对象(DOM对象):DOM实际上是BOM的一个子集,在网页上,组成页面的所有内容被组织在一个树形结构中(称为DOM树)。通俗地说,DOM就是指页面中所有HTML代码所组成的结构,因此document对象可以直接对页面内容进行操作。

常用属性:

document. title; //获取当前文档的标题。

document. URL; // 获取当前文档的URL。

常用方法:

document.getElementById(); //根据id属性值查找页面中对象(比如某标签)。

document.getElementsByClassName(); //根据class属性值查找页面对象集合。

document.getElementsByName(); //返回带有指定name属性值的对象集合。

document.getElementsByTagName(); //返回带有指定标签名的对象集合。

document. write(); //向文档写HTML表达式或JavaScript代码。

document. writeln(); //等同于write()方法,不同的是在输出完成后会追加一个换行符。

对象.属性名=属性值;//设置对象属性。

对象.innerHTML[=值]; //获取[设置]非表单元素的内容。

对象.value [=值]; //获取[设置]表单元素的内容。

对象.style.样式名[=值]; //获取[设置]对象的某样式值。

1.4.5 JavaScript中的事件

JavaScript中的事件通常是指用户在网页中执行中的某一动作,比如点击鼠标左键、双击鼠标左键、按下键盘等。用户执行这些动作往往是为了完成某一任务,比如提交表单等,而完成对应任务的过程要通过JavaScript代码(如函数等)来实现。JavaScript语言支持多种事件,整体上事件可以分为鼠标事件、键盘事件、页面加载与退出事件等。

常见的事件有:onclick(鼠标单击事件)、ondblclick(鼠标双击事件)、onfocus(获得焦点事件)、onblur(失去焦点事件)、onmousedown(鼠标按键按下事件)、onmouseup(鼠标按键弹起事件)、onmousemove(鼠标光标移动事件)、onmouseover(鼠标光标悬停事件)、onmouseout(鼠标光标移开事件)、onkeypress(键盘按键按下或按住事件)、onkeyup(键盘按键弹起事件)、onkeydown(键盘按键按下事件)、onchange(内容或值改变事件)、onload(页面或内容加载完成事件)、onunload(页面退出或关闭事件)等。

读者可通过以下示例了解JavaScript中事件的创建与使用方法。要注意的是,为对象创建事件的代码通常要放在对象之后,否则将产生异常错误。

例1:点击按钮实现页面跳转。

        <button onclick="window.open(′http://www.xynun.edu.cn′)">xynun</button>
          //新窗口打开
        <button onclick="window. location. href=′http://www.xynun.edu.cn′">xynun</
        button> //原窗口打开

例2:实时获取用户在文本框里输入的内容,并显示到另一个文本框中。

      <input type="text" id="temp1"/>
      <input type="text" id="temp2">
      <script>
          var t1=document.getElementById("temp1"); //捕获第一个文本框对象
          var t2=document.getElementById("temp2"); //捕获第二个文本框对象
          t1. onkeyup=function(){; //为第一个文本框添加键盘弹起事件
              t2. value=t1. value;
          }
          t1. onblur=function(){; //为第一个文本框添加失去失去焦点事件
              t1. value="我失去了焦点"
          }
          t2. onfocus=function(); //为第二个文本框添加获得焦点事件
          {
              t2. value="我获得了焦点"
          }
      </script>

例3:简单的表单验证。在<form>标签中添加onsubmit事件,事件调用自定义的表单验证函数checkForm(),当checkForm()函数返回值为true时提交表单,否则不提交表单。这是表单验证的一般过程。

      <form action =" http://www.xynun.edu.cn" method =" get" onsubmit =" return
  checkForm()">
          <input type="text" name="" id="username">
          <input type="submit" value="提交" id="submitBtn">
     </form>
     <script>
          function checkForm()
          {
            var username=document.getElementById("username");
            var temp="";
            if(username. value=="")
              {
                temp="内容不能为空";
            }
            else if(username. value. length<6)
            {
                temp="内容长度不能少于6位";
            }
            else if(username. value. length>15)
            {
                temp="内容长度不能多于15位";
            }
            else
            {
                temp=true;
            }
            if(temp! =true)
            {
                alert(temp);
                return false;
            }
            else
            {
                alert("通过");
                return true;
            }
        }
    </script>