JavaScript學(xué)習(xí)筆記

一眷唉、簡(jiǎn)介

JavaScript 是 Web 的編程語(yǔ)言岳链。
所有現(xiàn)代的 HTML 頁(yè)面都使用 JavaScript。JavaScript 是互聯(lián)網(wǎng)上最流行的腳本語(yǔ)言侮攀,這門語(yǔ)言可用于 HTML 和 web扮休,更可廣泛用于服務(wù)器迎卤、PC、筆記本電腦玷坠、平板電腦和智能手機(jī)等設(shè)備蜗搔。

我的第一個(gè)JavaScript程序:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥(niǎo)教程(runoob.com)</title>
<script>
function displayDate(){
    document.getElementById("demo").innerHTML=Date();
}
</script>
</head>
<body>

<h1>我的第一個(gè) JavaScript 程序</h1>
<p id="demo">這是一個(gè)段落</p>

<button type="button" onclick="displayDate()">顯示日期</button>

</body>
</html>

1.為什么學(xué)習(xí) JavaScript?

JavaScript web 開(kāi)發(fā)人員必須學(xué)習(xí)的 3 門語(yǔ)言中的一門:

  • HTML 定義了網(wǎng)頁(yè)的內(nèi)容
  • CSS 描述了網(wǎng)頁(yè)的布局
  • JavaScript 網(wǎng)頁(yè)的行為
    JavaScript 是腳本語(yǔ)言

2.JavaScript 是一種輕量級(jí)的編程語(yǔ)言。

JavaScript 是可插入 HTML 頁(yè)面的編程代碼八堡。
JavaScript 插入 HTML 頁(yè)面后樟凄,可由所有的現(xiàn)代瀏覽器執(zhí)行。
JavaScript 很容易學(xué)習(xí)兄渺。


一缝龄、JS的概念和聲明

問(wèn)題

在網(wǎng)頁(yè)的發(fā)展歷程中,發(fā)現(xiàn)網(wǎng)頁(yè)不能對(duì)用戶的數(shù)據(jù)進(jìn)行自動(dòng)校驗(yàn)和提供一些特效挂谍,造成用戶體驗(yàn)極差叔壤。

解決

使用JavaScript

作用

可以讓網(wǎng)頁(yè)和用戶之間進(jìn)行直接簡(jiǎn)單的交互

可以給網(wǎng)頁(yè)制作特效和畫面

注意

js是由瀏覽器解析執(zhí)行的

js需要在HTML文檔中進(jìn)行聲明

使用

聲明js代碼域

  1. 在head標(biāo)簽中使用script聲明js代碼

    <head>
        <script type="text/javascript">
            function test(){
                alert("hello js!");
            }
        </script>    
    </head>
    
  2. 在head標(biāo)簽中使用script引入外部聲明的js文件

    <script src="js/my.js" type="text/javascript" charset="utf-8">
    </script>
    

二、JS的變量學(xué)習(xí)

作用:變量是用來(lái)存儲(chǔ)數(shù)據(jù)的口叙,方便程序進(jìn)行操作

1.js的變量聲明

使用var關(guān)鍵字進(jìn)行變量聲明炼绘,格式如下

var 變量名=初始值;

2.js變量的特點(diǎn)

  1. 變量聲明只有var關(guān)鍵字妄田,聲明的變量可以存儲(chǔ)任意類型的數(shù)據(jù)
  2. js中可以不使用分號(hào)結(jié)尾俺亮,但是為了提升代碼的可讀性,建議使用
  3. 允許出現(xiàn)同名變量疟呐,但是后面的會(huì)覆蓋前面
  4. 聲明不賦值脚曾,默認(rèn)是undefined

3.js的數(shù)據(jù)類型

使用關(guān)鍵字typeof判斷數(shù)據(jù)類型

number:數(shù)值類型

string:字符類型

boolean:布爾類型

object:對(duì)象類型

4.js的變量強(qiáng)轉(zhuǎn)

使用Number()方法,將其他數(shù)據(jù)類型轉(zhuǎn)換為數(shù)值類型萨醒,轉(zhuǎn)換失敗返回NaN(not a number斟珊,是number類型)

使用Boolean()方法苇倡,將其他數(shù)據(jù)類型轉(zhuǎn)換為布爾類型富纸,有值為true囤踩,無(wú)值為false

?

5.特殊的值

null(object類型)

undefined(undefined類型)

NaN(number類型)

三、JS的運(yùn)算符

算數(shù)運(yùn)算符

? 加法:+晓褪,在有一方為字符串時(shí)堵漱,結(jié)果為字符串

? 減法:-

? 乘法:*

? 除法:/

? 取余:%

除了+在遇到字符串時(shí)會(huì)默認(rèn)字符串拼接,其余符號(hào)遇到非數(shù)字會(huì)進(jìn)行隱式類型轉(zhuǎn)換為數(shù)字再運(yùn)算

邏輯運(yùn)算符

1 與或非

涣仿!

&&

||

按位與

按位或

2 關(guān)系運(yùn)算符

++

--

+=

-=

勤庐!=

>=

<=

等等

1.==

<script type="text/javascript">
    var a=1;
    var a1="1";
    var a2=true;
    var a3="true";
    var a4="a";
    var a5="a";
    alert(a==a1);//true
    alert(a==a2);//true
    alert(a==a3);//false
    alert(a1==a2);//true
    alert(a1==a3);//false
    alert(a2==a3);//false
    alert(a4==a5);//true
<script>

等值運(yùn)算符:==

? 先判斷類型,類型一致則直接比較好港。

? 類型不一致愉镰,則先使用Number()進(jìn)行強(qiáng)轉(zhuǎn)后進(jìn)行比較

注意:alert(none==undefined)返回true

2.===

等同運(yùn)算符:===

? 先判斷類型,類型一致則再比較內(nèi)容钧汹,內(nèi)容也一致則返回true

? 類型不一致則直接返回false

注意:alert(none===undefined)返回false

四丈探、JS的邏輯結(jié)構(gòu)

if

單分支

雙分支

多分支

switch

switch (){
                case value:
                    ....
                    break;
                default:
                    break;
            }

循環(huán)結(jié)構(gòu)

for(var i;i>100;i--){
    
}

while(){
      
      }

do{
    
}while()

五、JS的數(shù)組

1.數(shù)組的聲明

var arr=new Array();
arr[0]="abc";
alert(arr);//abc
var arr2=new Array(5);
alert(arr2.length);//5,長(zhǎng)度為5
var arr3=[1,2,3,4,5];
alert(arr3);//1,2,3,4,5
var arr4=new Array([5,6]);
alert(arr4.length);//1,arr4的第一個(gè)元素為一個(gè)數(shù)組

js中的數(shù)組聲明不用指定長(zhǎng)度拔莱,js的數(shù)組長(zhǎng)度是不固定的

2.數(shù)組的賦值和取值

var arr=[];
arr[0]="2";
arr[1]="abc";
arr[2]="true";
arr[3]=new Data();
arr[10]="哈哈";
alert(arr);//js內(nèi)的數(shù)組可以存儲(chǔ)任意類型數(shù)值,而且可以跳著賦值碗降。
//如果下標(biāo)所在數(shù)組值不存在,返回undefined

3.數(shù)組的length屬性

var arr=[];
alert(arr.length);//0
arr[10]="abc";
alert(arr.length);//11
arr.length=100;
alert(arr.length);//100
  1. 作用1:數(shù)組名.length 返回當(dāng)前數(shù)組的長(zhǎng)度
  2. 作用2:數(shù)組名.length=值塘秦,動(dòng)態(tài)改變數(shù)組的長(zhǎng)度
    1. 當(dāng)length小于當(dāng)前數(shù)組長(zhǎng)度讼渊,后面數(shù)據(jù)會(huì)丟失
    2. 當(dāng)length大于原有長(zhǎng)度,則使用空進(jìn)行填充

4.數(shù)組的遍歷

使用for循環(huán)

for(var i=0;i<arr.length;i++){
    alert(arr[i]);
}

for in

for(var i in arr){
    alert(arr[i]);
}

5.一個(gè)網(wǎng)頁(yè)計(jì)算器例子

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>計(jì)算器</title>
        <style type="text/css">
            #showdiv{
                border: solid 1px;
        
                width: 320px;
            
                padding-bottom: 20px;
                text-align: center;
                margin: auto;//設(shè)置居中
                margin-top: 50px;
                border-radius: 10px;//設(shè)置邊框角度
                background-color: floralwhite;
            }
            input[type=text]{
                margin-top: 20px;
                width: 290px;
                height: 40px;
                font-size: 20px;
                text-align: right;
                padding-right: 10px;
            }
            input[type=button]{
                width: 60px;
                height: 60px;
                margin-top: 20px;
                margin-left: 5px;
                margin-right: 5px;
                font-size: 30px;
                font-weight: bold;
                font-family: serif;
                
            }
            input[type=button]:hover{
                background-color: aliceblue;
            }
        </style>
        <script type="text/javascript">
            function test(btn){
                //獲取button按鈕對(duì)象的value
                var num=btn.value;
                //根據(jù)點(diǎn)擊動(dòng)作執(zhí)行對(duì)應(yīng)的業(yè)務(wù)邏輯
                switch (num){
                    case "=":
                        
                        document.getElementById("t1").value=eval(document.getElementById("t1").value);
                        
                        break;
                    case "c":
                        document.getElementById("t1").value="";
                        break;
                    default:
                        //將按鈕的值賦值給input輸入框
                        document.getElementById("t1").value+=num;
                        break;
                }
            }
        </script>
    </head>
    <body>
        <h3 align="center">計(jì)算器</h3>
        <hr >
        <div id="showdiv">
            <input type="text" name="" id="t1" value="" readonly="readonly"/><br>
            
            <input type="button" name="" id="" value="1" onclick="test(this)"/>
            <input type="button" name="" id="" value="2" onclick="test(this)"/>
            <input type="button" name="" id="" value="3" onclick="test(this)"/>
            <input type="button" name="" id="" value="4" onclick="test(this)"/><br>
            <input type="button" name="" id="" value="5" onclick="test(this)"/>
            <input type="button" name="" id="" value="6" onclick="test(this)"/>
            <input type="button" name="" id="" value="7" onclick="test(this)"/>
            <input type="button" name="" id="" value="8" onclick="test(this)"/><br>
            <input type="button" name="" id="" value="9" onclick="test(this)"/>
            <input type="button" name="" id="" value="0" onclick="test(this)"/>
            <input type="button" name="" id="" value="+" onclick="test(this)"/>
            <input type="button" name="" id="" value="-" onclick="test(this)"/><br>
            <input type="button" name="" id="" value="*" onclick="test(this)"/>
            <input type="button" name="" id="" value="/" onclick="test(this)"/>
            <input type="button" name="" id="" value="c" onclick="test(this)"/>
            <input type="button" name="" id="" value="=" onclick="test(this)"/>
        </div>
    </body>
</html>

6.數(shù)組的常用操作

1).數(shù)組合并---concat

<script typr="text/javascript">
    var arr=[1,"abc","zhangsan","12"];
    var b=["hello","今天天氣不錯(cuò)"];
    var c="js";
    var d=arr.concat(b,c);
    //d=[1,"abc","zhangsan","12","hello","今天天氣不錯(cuò)","js"],d.length=7
</script>

2).數(shù)組轉(zhuǎn)字符串---join

image-20200127182120202.png
image-20200128161530066.png

3)pop()尊剔、shift()

將數(shù)組視為棧爪幻,彈棧操作,移除數(shù)組最后一個(gè)元素并返回該元素

shift()與之相反须误,將數(shù)組視為隊(duì)列笔咽,進(jìn)行出隊(duì)操作

var arr=[1,"abc","zhangsan","12"];
var ele=arr.pop();//ele="12"

4) push()、unshift()

將數(shù)組視為棧霹期,壓棧操作叶组,在數(shù)組最后追加一個(gè)元素或者多個(gè)元素并返還數(shù)組長(zhǎng)度

unshift()與之相反,將數(shù)組視為隊(duì)列历造,進(jìn)行入隊(duì)操作

注意:如果追加的是一個(gè)數(shù)組甩十,新數(shù)組整體作為舊數(shù)組的一個(gè)元素。

從中可知JavaScript的數(shù)組是鏈?zhǔn)浇Y(jié)構(gòu)吭产。

5)reverse()

將數(shù)組顛倒侣监,同時(shí)返回該數(shù)組

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();
//fruits 結(jié)果輸出:

//Mango,Apple,Orange,Banana

6)sort()排序方法

array.sort(sortfunction)
參數(shù) 描述
sortfunction 可選。規(guī)定排序順序臣淤。必須是函數(shù)橄霉。
Type 描述
Array 對(duì)數(shù)組的引用。請(qǐng)注意邑蒋,數(shù)組在原數(shù)組上進(jìn)行排序姓蜂,不生成副本按厘。

注意:當(dāng)數(shù)字是按字母順序排列時(shí)"40"將排在"5"前面。使用數(shù)字排序钱慢,你必須通過(guò)一個(gè)函數(shù)作為參數(shù)來(lái)調(diào)用逮京。

7)splice,從中間刪除或插入

語(yǔ)法

array.splice(index,howmany,item1,.....,itemX)

參數(shù) Values

參數(shù) 描述
index 必需束莫。規(guī)定從何處添加/刪除元素懒棉。 該參數(shù)是開(kāi)始插入和(或)刪除的數(shù)組元素的下標(biāo),必須是數(shù)字览绿。
howmany 可選策严。規(guī)定應(yīng)該刪除多少元素。必須是數(shù)字饿敲,但可以是 "0"享钞。 如果未規(guī)定此參數(shù),則刪除從 index 開(kāi)始到原數(shù)組結(jié)尾的所有元素诀蓉。
item1, ..., itemX 可選栗竖。要添加到數(shù)組的新元素

返回值

Type 描述
Array 如果從 arrayObject 中刪除了元素,則返回的是含有被刪除的元素的數(shù)組渠啤。

注意狐肢,可以刪除0個(gè),返回空數(shù)組

8)toString沥曹、valueOf

image.png

valueOf()定義和用法

valueOf() 方法返回 Array 對(duì)象的原始值份名。

該原始值由 Array 對(duì)象派生的所有對(duì)象繼承。

valueOf() 方法通常由 JavaScript 在后臺(tái)自動(dòng)調(diào)用妓美,并不顯式地出現(xiàn)在代碼中僵腺。

注意: valueOf() 方法不會(huì)改變?cè)瓟?shù)組。

六壶栋、JS的函數(shù)

js的函數(shù)學(xué)習(xí)一:

作用:功能代碼塊的封裝辰如,減少代碼冗余

1 函數(shù)的聲明:

方式一

function函數(shù)名(形參名1,形參名2贵试,...){執(zhí)行體}

方式二

var 函數(shù)名=new Function(“形參1”琉兜,“形參2”,...毙玻,“函數(shù)體”)豌蟋;

該種方式中,將函數(shù)作為一個(gè)類桑滩,new了一個(gè)函數(shù)對(duì)象梧疲,如使用類型強(qiáng)轉(zhuǎn)為字符串,可以發(fā)現(xiàn)該字符串與方式一相同。

只不過(guò)該種方式聲明的函數(shù)名調(diào)用函數(shù)時(shí)幌氮,調(diào)用的是對(duì)象內(nèi)的anonymous函數(shù)

var test2=new Function("a1","a2","alert('I'm function2')");
test2(1,2);

方式三

var test3=function(a1,a2){
    alert("I'm functon3");
}

2 函數(shù)的參數(shù)

function testParam(a1,a2){
    alert("I'm learning Param")
}
testParam();//正確缭受,有初值undefined

js中的函數(shù)在調(diào)用時(shí),形參可以不賦值浩销,也可以少賦值(實(shí)參依次賦值)或者多賦值
因此js中沒(méi)有函數(shù)重載

3 函數(shù)的返回值

默認(rèn)返回值是undefined

注意:js的代碼聲明趨于和執(zhí)行區(qū)域是一起的,都是在js代碼域中

函數(shù)學(xué)習(xí)二

1 函數(shù)的執(zhí)行符

var test1=function(){
    alert("函數(shù)的執(zhí)行符學(xué)習(xí)")听哭;
    return "js";
}
alert(test1);//不執(zhí)行test1慢洋,打印test1的內(nèi)容
alert(test1());//執(zhí)行test1,打印test1返回值的內(nèi)容

在js中函數(shù)的執(zhí)行符就是小括號(hào)

沒(méi)有小括號(hào)時(shí)函數(shù)名就是一個(gè)變量

2 函數(shù)作為實(shí)參傳遞

image.png

image.png

在js中函數(shù)是可以作為實(shí)參進(jìn)行傳遞的陆盘。

上圖中a加上()則顯示返回值undefined

3 開(kāi)發(fā)中常用的傳遞方式?

function testObj2(fn){
    //testObj2函數(shù)在被調(diào)用的時(shí)候普筹,實(shí)參必須是一個(gè)函數(shù)對(duì)象
    fn();
}
testObj2(function(){
    alert("開(kāi)發(fā)");
})

優(yōu)點(diǎn):函數(shù)對(duì)象的動(dòng)態(tài)執(zhí)行,不用預(yù)先聲明好隘马,調(diào)用時(shí)傳入即可

七太防、JS的自定義類

1、類的聲明

function Person(name,age){
    this.name=name;
    this.age=age;
    this.fav="sing";
    this.test=function(a){
        alert(a);
    }
}

2酸员、類的使用

var p1=new Person("zhangsan",32);
alert(p1.name,p1.age);
p1.test("hello");//等于alert(“hello”)
p1.adress="beijing";//正確用法

3蜒车、類的“繼承”

var p2=new Person("lisi",23);
alert(p1.test===p2.test);//false
function Person(name,age){
    this.name=name;
    this.age=age;
    this.fav="sing";
    
}
........
........
Person.prototype.test=function(a){alert(a);}//共有
alert(p1.test===p2.test);//false

prototype關(guān)鍵字

通過(guò)該關(guān)鍵字實(shí)現(xiàn)了不同對(duì)象之間的數(shù)據(jù)共享

作用

  1. 實(shí)現(xiàn)某個(gè)類的所有子對(duì)象的方法區(qū)對(duì)象的共享,節(jié)省內(nèi)存

  2. 偽繼承(可以鏈?zhǔn)嚼^承-----)

    function User(uname,pwd){
        this.uname=uname;
        this.pwd=pwd;
    }
     Person.prototype.user=new User();
     User.prototype.testU=function(){alert("我是user")};
     p1.user.testU();//可以通過(guò)p1對(duì)象調(diào)用testU方法了
    
    Person.prototype=new User();
    p1.prototype.testU();
    

4幔嗦、自定義對(duì)象

1)創(chuàng)建自定義對(duì)象

對(duì)象的作用:用來(lái)存儲(chǔ)整體數(shù)據(jù)

原因:很多時(shí)候我們沒(méi)有辦法預(yù)先知道一個(gè)對(duì)象應(yīng)該有哪些屬性酿愧,所以只能臨時(shí)創(chuàng)建一個(gè)對(duì)象來(lái)自定義屬性存儲(chǔ)數(shù)據(jù),來(lái)保證數(shù)據(jù)的完整性邀泉。

應(yīng)用:

? Ajax會(huì)使用

使用:

? 1嬉挡、創(chuàng)建自定義對(duì)象

? var 對(duì)象名=newObject();

? 對(duì)象名.屬性名1=屬性值1汇恤;

? ...

? ...


? var 對(duì)象名={};

? 對(duì)象名.屬性名1=屬性值1庞钢;

? ...

? ...

? 2、一般用來(lái)存儲(chǔ)數(shù)據(jù)因谎,不會(huì)再自定義對(duì)象中存儲(chǔ)函數(shù)對(duì)象

? 3基括、js中的對(duì)象屬性和內(nèi)容是可以自定義擴(kuò)充的,不是依賴于類的聲明的财岔,類知識(shí)對(duì)象公共部分的一種聲明阱穗,是為了節(jié)省代碼的冗余的。

var obj=new Object();
obj.name="zhangsan";
obj.age=23;
obj.test=function(){
    alert("我是obj");
}

5使鹅、js的常用方法和對(duì)象

作用:js將常用的功能已經(jīng)封裝好揪阶,調(diào)用即可,不用重復(fù)封裝患朱。

String

操作字符

function testString(){
    var str="abcdefg";
    //1.大小寫轉(zhuǎn)換  
   alert(str.toUpperCase()+":"+str.toLowerCase());
    //2.字符串截取
    alert(str.substr(0,1));
    //substr:返回一個(gè)從指定位置開(kāi)始的指定長(zhǎng)度的字符串鲁僚,參數(shù)為start,length:從start開(kāi)始要截取的長(zhǎng)度
    //substring:返回位于string對(duì)象中指定位置的字符串,參數(shù)為start冰沙,end:字符串的結(jié)束位置
    //3.查找字符位置
    indexOf  返回指定字符第一次出現(xiàn)的位置
    lastIndexOf  返回指定字符最后一次出現(xiàn)的位置
}

Date

需要先 var 變量名=new Date()侨艾;

//Date對(duì)象
function testDate(){
    //創(chuàng)建日期對(duì)象
    var d=new Date();
    alert(d);//隱式調(diào)用toString方法,顯示當(dāng)前時(shí)間
    //操作日期和時(shí)間
        //1 獲取年份
        alert(d.getYear());//返回1900年距今的年數(shù)
        alert(d.getFullYear());//返回當(dāng)前的年份
        //獲取月份
        alert(d.getMonth()+1);//獲取當(dāng)前的月份數(shù)(從0算起)拓挥,注意+1
        //獲取日期
        alert(d.getDate());//返回當(dāng)前的日期
        //獲取星期幾的數(shù)字
        alert(d.getDay());//返回星期數(shù)唠梨。星期天是0
        //獲取小時(shí)數(shù)
        alert(d.getHours());//返回小時(shí)數(shù)
        //獲取分鐘數(shù)
        alert(d.getMinutes());//返回當(dāng)前的分鐘數(shù)
        //獲取秒數(shù)
        alert(d.getSeconds());//返回當(dāng)前的秒數(shù)
}

js獲取的時(shí)間是客戶端的時(shí)間,不能作為功能校驗(yàn)標(biāo)準(zhǔn)

Math

使用:Math.函數(shù)名

function testMath(){
    //隨機(jī)數(shù)字
    alert(Math.random());//數(shù)值在0-1之間
    //四舍五入
    round()
    //上下取整
    ceil()
    floor()
    //
    //
    //
}

Global

global對(duì)象是一個(gè)固有對(duì)象侥啤,目的是把所有全員方法集中在一個(gè)對(duì)象中

global對(duì)象沒(méi)有語(yǔ)法当叭,直接調(diào)用其方法

//eval方法,直接把參數(shù)作為方法執(zhí)行
eval("var a=123;");//等于聲明了一個(gè)變量a
//isNaN方法。返回一個(gè)布爾值盖灸,指明提供的值是否值得保留至NaN(不是數(shù)字)蚁鳖,如果參數(shù)用Number強(qiáng)轉(zhuǎn)后是NaN,返回true
//parseInt,返回字符串轉(zhuǎn)換后得到的整數(shù)
parseInt("abc");//返回NaN
parseInt("12abc");//返回12
//parseFloat同理

八赁炎、Js的事件機(jī)制學(xué)習(xí):

作用:根據(jù)用戶在網(wǎng)頁(yè)中的不同操作觸發(fā)執(zhí)行對(duì)應(yīng)的功能函數(shù)

概念:基于監(jiān)聽(tīng)的醉箕,一個(gè)動(dòng)作會(huì)觸發(fā)其他事物的執(zhí)行

使用:

單雙擊事件:

單擊事件

<input type="button" name="" id="" value="測(cè)試" onclick="函數(shù)名();" />

注:

? js中添加事件的第一種方式

? 在HTML上直接使用事件屬性進(jìn)行添加,屬性值為所監(jiān)聽(tīng)執(zhí)行的函數(shù)

? js中的事件只有在當(dāng)前HTML元素上有效

? 一個(gè)HTML元素可以添加多個(gè)不同的事件

? 一個(gè)事件可以監(jiān)聽(tīng)觸發(fā)多個(gè)函數(shù)的執(zhí)行徙垫,不同函數(shù)之間用分號(hào)隔開(kāi)

雙擊事件

ondblclick

鼠標(biāo)事件

onmouseover() 鼠標(biāo)懸停事件

onmousemove() 鼠標(biāo)移動(dòng)

onmouseout() 鼠標(biāo)移出

鍵盤事件

onkeyup 鍵盤彈起事件

onkeydown 鍵盤下壓事件

焦點(diǎn)事件

onfocus 獲取焦點(diǎn)事件

onblur 失去焦點(diǎn)事件

頁(yè)面加載事件

onload 頁(yè)面加載事件

值改變事件

onchange

事件機(jī)制學(xué)習(xí)2

1.給合適的HTML標(biāo)簽添加合適的事件

onchange-----給select下拉框

onload-----給body

單雙擊-----用戶會(huì)進(jìn)行點(diǎn)擊動(dòng)作的HTML元素

鼠標(biāo)事件----用戶會(huì)進(jìn)行鼠標(biāo)移動(dòng)操作的

鍵盤事件-----用戶會(huì)進(jìn)行鍵盤操作的HTML元素

2.給HTML元素添加多個(gè)事件時(shí)讥裤,注意事件之間的沖突

例如單雙擊事件會(huì)沖突

當(dāng)事件的觸發(fā)條件包含相同部分的時(shí)候會(huì)產(chǎn)生事件之間的沖突

3.事件的阻斷 ?

function testA(){
    return false;//此時(shí)不再跳轉(zhuǎn)
}
---
<a  target="_blank" onclick="return testA();">wwwwww</a>

當(dāng)事件所監(jiān)聽(tīng)的函數(shù)將返回值返回給事件時(shí)

? false將阻斷當(dāng)前事件所在的HTML標(biāo)簽的功能

? true將繼續(xù)執(zhí)行當(dāng)前事件所在的HTML標(biāo)簽的功能

4.超鏈接調(diào)用js函數(shù)

function testHref(){
    alert("onactive");
}
----
<a href="javascript:testHref()">aaaaa</a>

九、window對(duì)象

bom瀏覽器對(duì)象模型

? 瀏覽器的內(nèi)核語(yǔ)言支持規(guī)范

是規(guī)范瀏覽器對(duì)js語(yǔ)言的支持(js調(diào)用瀏覽器本身的功能)

BOM的具體實(shí)現(xiàn)是window對(duì)象

window對(duì)象學(xué)習(xí)

window對(duì)象不用new姻报,直接使用即可坞琴,累死Math的使用方法,window關(guān)鍵字可以省略不寫

1.window對(duì)象的常用方法

1).框體方法

<script type="text/javascript">
    function testAlert(){
        window.alert("警告框體");//無(wú)返回值
    }
    function testConfirm(){
        window.confirm("確認(rèn)框");//提示用戶選擇一項(xiàng)操作(確認(rèn)--true/取消---false)  
    }
    function testPrompt(){
        var a=window.prompt("提示框");//收集用戶信息逗抑,返回值為填入的值剧辐,未輸入為null,默認(rèn)是空字符串
        
    }
</script>
<input type="button" name="" id="" value="測(cè)試警告框" onclick="testAlert()"/>
<input type="button" name="" id="" value="測(cè)試確認(rèn)框" onclick="testConfirm()"/>
<input type="button" name="" id="" value="測(cè)試提示框" onclick="testPrompt()"/>
------

2).定時(shí)和間隔執(zhí)行方法

<script type="text/javascript">
    function testSetTimeout(){//觸發(fā)后指定時(shí)間后執(zhí)行指定函數(shù)
        window.setTimeout(function(){//返回值為線程id
            alert("我是定時(shí)執(zhí)行");
        },3000);
    }
</script>
<input type="button" name="" id="" value="測(cè)試定時(shí)執(zhí)行" onclick="testSetTimeout()"/>

setInterval


image.png

clearTimeout 停止當(dāng)前的定時(shí)方法邮府,參數(shù)為定時(shí)器id

clearInterval 停止當(dāng)前的間隔方法荧关,參數(shù)為間隔器id

3).子窗口方法

<script type="text/javascript">
    function testOpen(){
    //window.open();//出現(xiàn)新的標(biāo)簽頁(yè)
    window.open('son.html',.......);//配置信息直接復(fù)制下圖的
}
</script>
<input type="button" name="" id="" value="測(cè)試定時(shí)執(zhí)行" onclick="testOpen()"/>
image.png

分別是子頁(yè)面相對(duì)路徑、打開(kāi)方式褂傀、高忍啤、寬、距上距離仙辟、距左距離同波、工具欄、菜單欄叠国、滾動(dòng)條未檩、大小是否可變、地址欄粟焊、狀態(tài)欄


<--!以下是son.html-->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>son頁(yè)面</title>
        <script type="text/javascript">
            function testTime(){
                window.setInterval(function(){
                    var span=document.getElementById("timeSpan");
                    span.innerHTML=span.innerHtML-1;
                    if(span.innerHTML==0){
                        window.close();//只能關(guān)閉window.open打開(kāi)的頁(yè)面                     
                    }
                    
                    
                },1000);
            }
        </script>
        
        
    </head>
    <body onload="testTime">
        <h3>son頁(yè)面</h3>
        <hr />
        <b>本頁(yè)面<span id="timeSpan" style="color:red;font-size:40px;">5</span>秒后關(guān)閉</b>
    </body>
</html>


2.子頁(yè)面調(diào)用父頁(yè)面的函數(shù)

子頁(yè)面中使用window.opener.函數(shù)名()冤狡;即可調(diào)用父頁(yè)面函數(shù)

作用:可以從子頁(yè)面返回信息給父頁(yè)面孙蒙,并且刷新父頁(yè)面

3.window對(duì)象的常用屬性

地址欄屬性location

window.location.;跳轉(zhuǎn)到指定網(wǎng)址

window.location.reload();重新刷新

歷史記錄屬性

window.history.forward();//前進(jìn)
window.history.back();//頁(yè)面資源后退
window.history.go(index);//跳轉(zhuǎn)到指定的歷史記錄資源悲雳,//index=0相當(dāng)于刷新當(dāng)前頁(yè)面

屏幕屬性

var x=window.screen.width;

var y=window.screen.height;

瀏覽器配置屬性

var a=window.navigator.userAgent;

獲取瀏覽器信息

十挎峦、主體面板屬性(document)

document對(duì)象學(xué)習(xí)

1.document對(duì)象的概念

瀏覽器對(duì)外提供的支持js的用來(lái)操作HTML文檔的一個(gè)對(duì)象,此對(duì)象封存的HTML文檔的所有信息

2.使用document對(duì)象

1)獲取HTML元素對(duì)象對(duì)象

①直接獲取方式

id getElementById 返回值是該元素對(duì)象

name getElementsByName 返回值是一個(gè)名叫NodeList的對(duì)象數(shù)組

通過(guò)標(biāo)簽名 getElementsByTagName 返回值是一個(gè)名叫HTMLCollection的對(duì)象數(shù)組

class getElementsByClass 返回值是一個(gè)名叫HTMLCollection的對(duì)象數(shù)組

返回值都是元素對(duì)象

②間接獲取方式

父子關(guān)系

? 標(biāo)簽內(nèi)有標(biāo)簽

var showdiv=document.getElementById("showdiv");
var children=showdiv.childNodes;//返回值為NodeList數(shù)組

子父關(guān)系

var inp=document.getElementById("inp");
var div=inp.parentNode;

兄弟關(guān)系

var ino=document.getElementById("inp");
var preEle=inp.previousSibling;//前一個(gè)
var nextEle=inp.nextSibling;//后一個(gè)

2)操作HTML元素對(duì)象的屬性

先獲取元素對(duì)象

再操作元素屬性

var inp=document.getElementById("uname");
alert(inp.type+":"+inp.name);//id,value等屬性

//修改元素屬性
inp.value="aaa";
inp.type=button;//type屬性為空或一個(gè)錯(cuò)誤的值時(shí)合瓢,瀏覽器默認(rèn)解析為text

可以操作元素的自定義屬性

需要使用set坦胶、get方法

例如 abc屬性


image.png

該方式獲取不到


image.png

該用

alert(inp.getAttribute("abc"));
inp.setAttribute("abc","新的值");

當(dāng)使用set、get方法來(lái)獲取固有屬性時(shí)晴楔,設(shè)置可以成功顿苇,但是get只能拿到document內(nèi)的屬性的初試值,拿不到實(shí)時(shí)數(shù)據(jù)

3)操作HTML元素對(duì)象的內(nèi)容和樣式

innerHTML獲取元素對(duì)象內(nèi)所有內(nèi)容滥崩,包括HTML標(biāo)簽

innerText獲取元素對(duì)象內(nèi)所有文本內(nèi)容岖圈,不包括標(biāo)簽


修改

var div=document.getElementById("div01");

div.innerHTML="ssssss";

操作元素樣式=操作元素屬性

//添加讹语、修改钙皮、刪除樣式
var shoudiv=document.getElementById("showdiv");
showdiv.style="backgroud-color:red";//這叫覆蓋,只剩背景顏色屬性了
showdiv.style.backgroudColor="red";
showdiv.style.border="solid 2px red";
showdiv.style.border="";//置空等于刪除元素標(biāo)簽的屬性顽决,但不會(huì)刪除css內(nèi)的屬性

//修改類選擇器
//class關(guān)鍵字在document類中叫className
var div01=document.getElementById("div01");
alert(div01.className);//為元素標(biāo)簽的屬性值
div01.className="";

4)操作HTML的文檔結(jié)構(gòu)

增加節(jié)點(diǎn)

刪除節(jié)點(diǎn)

第一種方式:使用innerHTML
function testAdd(){
    var showdiv=document.getElementById("showdiv");
    showdiv.innerHTML+="<div><input type='file' name='' id='' value=''  /><input type='button' name='' id='' value='刪除' onclick='delInp(this)' /></div>
    ";
}
function delInp(btn){
    //獲取父級(jí)div
    var showdiv=document.getElementById("showdiv");
    var cdiv=btn.parentNode;
    showdiv.removeChild(cdiv);
}
image.png

不太適用于有用戶動(dòng)作的時(shí)候

第二種方式:
function testOperation2(){
    var showdiv=document.getElementById("showdiv");
    var inp=document.createElement("input");
    inp.type="file";
    var btn=document.createElement("input");
    btn.type="button";
    btn.value="刪除";
    btn.onclick=function(){
        showdiv.removeChild(inp);
        showdiv.removeChild(btn);
        showdiv.removeChild(br);
    }
    var br=document.createElement("br");
    showdiv.appendChild(inp);
    showdiv.appendChild(btn);
    showdiv.appendChild(br);
}
image.png

5)document操作Form元素

function testform(){
    var fm=document.getElementById("fm");
    alert(fm);
    var frm=document.frm;
    alert(frm);//這兩個(gè)相等
    
    
}
//獲取form表單元素對(duì)象
fm.elements;//只獲取表單元素短条,其余標(biāo)簽不在里面


form表單的常用方法
fm.submit();//等于提交
fm.reset();

fm.action="http://www.baidu.com/s";

js表單元素的通用屬性
只讀   readonly
通用   disabled

操作多選框:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
            <script type="text/javascript">
                function testCheckBox(){
                    //獲取所有多選元素對(duì)象數(shù)組
                    var favs=document.getElementsByName("fav");
                    
                    for(var i=0;i<favs.length;i++){
            
                        alert(favs[i].value+":"+favs[i].checked);
                    }                   
                }
                function testCheckAll(){
                    var favs=document.getElementsByName("fav");
                    for(var i=0;i<favs.length;i++){
                                
                        favs[i].checked=!favs[i].checked;
                    }   
                }
            </script>
        
    </head>
    <body>
        <h3>操作表單元素</h3>
        <hr />
        <b>操作多選框</b><br /><br />
        <input type="checkbox" name="fav" id="fav" value="1" />遠(yuǎn)走高飛<br>
        <input type="checkbox" name="fav" id="fav" value="2" />當(dāng)<br />
        <input type="checkbox" name="fav" id="fav" value="3" />李白<br>
        <input type="checkbox" name="fav" id="fav" value="4" />杜甫<br>
        <input type="checkbox" name="fav" id="fav" value="5" />see you again<br />
        <input type="checkbox" name="fav" id="fav" value="6" />fade<br />
        <input type="button" name="" id="" value="播放" onclick="testCheckBox()" />
        <input type="button" name="" id="" value="全選" onclick="testCheckAll()" />
    </body>
</html>


操作下拉框

<script type="text/javascript">
                function testCheckBox(){
                    //獲取所有多選元素對(duì)象數(shù)組
                    var favs=document.getElementsByName("fav");
                    
                    for(var i=0;i<favs.length;i++){
            
                        alert(favs[i].value+":"+favs[i].checked);
                    }                   
                }
                function testCheckAll(){
                    var favs=document.getElementsByName("fav");
                    for(var i=0;i<favs.length;i++){
                                
                        favs[i].checked=!favs[i].checked;
                    }   
                }
                function testSel(){
                    var sel=document.getElementById("address");
                    // alert(sel.value);
                    var os=sel.options;
                    for(var i=0;i<os.length;i++){
                        if(os[i].selected==true){
                            alert(os[i].value+":"+os[i].text);
                        }
                    }
                    
                }
                
</script>
<select name="" id="address" onchange="testSel()">
            <option value ="0">--請(qǐng)選擇--</option>
            <option value ="1">北京</option>
            <option value ="2">上海</option>
            <option value ="3">廣州</option>
</select>

6)document操作表格

rowIndex 返回行對(duì)象角標(biāo)

deleteRow(要?jiǎng)h除的行對(duì)象的角標(biāo))

insertRow

insertCell

7)document對(duì)象實(shí)現(xiàn)form表單校驗(yàn)

獲取信息

創(chuàng)建校驗(yàn)規(guī)則(正則表達(dá)式

開(kāi)始校驗(yàn)

輸出校驗(yàn)結(jié)果

例子


image.png

onblur=“checkUname()” //失去焦點(diǎn)時(shí)觸發(fā)函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末才菠,一起剝皮案震驚了整個(gè)濱河市茸时,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赋访,老刑警劉巖可都,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚓耽,居然都是意外死亡渠牲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門步悠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)签杈,“玉大人,你說(shuō)我怎么就攤上這事鼎兽〈鹄眩” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵谚咬,是天一觀的道長(zhǎng)鹦付。 經(jīng)常有香客問(wèn)我,道長(zhǎng)择卦,這世上最難降的妖魔是什么睁壁? 我笑而不...
    開(kāi)封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任背苦,我火速辦了婚禮,結(jié)果婚禮上潘明,老公的妹妹穿的比我還像新娘行剂。我一直安慰自己,他們只是感情好钳降,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布厚宰。 她就那樣靜靜地躺著,像睡著了一般遂填。 火紅的嫁衣襯著肌膚如雪铲觉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天吓坚,我揣著相機(jī)與錄音撵幽,去河邊找鬼。 笑死礁击,一個(gè)胖子當(dāng)著我的面吹牛盐杂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哆窿,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼链烈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了挚躯?” 一聲冷哼從身側(cè)響起强衡,我...
    開(kāi)封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎码荔,沒(méi)想到半個(gè)月后漩勤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缩搅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年越败,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誉己。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眉尸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出巨双,到底是詐尸還是另有隱情噪猾,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布筑累,位于F島的核電站袱蜡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏慢宗。R本人自食惡果不足惜坪蚁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一奔穿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敏晤,春花似錦贱田、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至译打,卻和暖如春耗拓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奏司。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工乔询, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人韵洋。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓竿刁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親麻献。 傳聞我的和親對(duì)象是個(gè)殘疾皇子们妥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容