最通俗易懂的JavaScript進階教程

前言:“當你停止嘗試時,就是失敗的時候。”你好!我是夢陽辰。快和我一起繼續學習起來吧!

如果你對JavaScript瞭解甚少,也許下面一篇文章對你有用!

最通俗易懂的JavaScript入門教程

最通俗易懂的JavaScript實用案例

01.JS的常用事件

1.blur失去焦點
光標失去
2.focus獲得焦點
光標獲得

3.change 下拉列表選中改變,或文本框內容改變。

4.click鼠標單擊
5.dbclick鼠標雙擊

6.keydown鍵盤按下
7.keyup鍵盤彈起

8.load頁面加載完畢
頁面全部加載完畢後,及所有的HTML元素加載完畢後發生。

9.mousedown鼠標按下
10.mouseover鼠標經過
11.mousemove鼠標移動
12.mouseout鼠標離開
13.mouseup鼠標彈起

14.reset表單重置
15.submit表單提交

16.select文本被選定
選中文本

任何一個事件都會對應一個事件句柄,事件句柄是在事件前添加on。onxxx這個事件句柄出現在一個標籤的屬性位置上。(事件句柄以屬性的形式存在)

回調函數:
回調函數的特點:自己把這個代碼寫出來了,但是這個函數不是自己負責調用,由其他程序負責調用該函數。

如:

<script>
function sayHello(){
alert("hello js!");
}
</script>
<!--註冊標籤的第一種方式,直接在標籤中使用事件句柄-->
<!--以下代碼的含義是,將sayHello函數註冊到按鈕上,等click事件發生後,該函數被瀏覽器調用,我們稱這個函數爲回調函數-->
<input type="button" value="hello" onclick="sayHello()"/>
<input type="button" value="hello2" id="mybtn"/>
<input type="button" value="hello2" id="mybtn2"/>

<!--第二種註冊事件的方式,是使用純JS代碼完成事件的註冊。-->
<script type ="text/javascript">
function doSome(){
alert("do some");
}
<!--第一步先獲取這個按鈕對象(document是內置對象,代表整個HTML頁面-->
var btnObj=document.getElementById("mybtn");
<!--第二步:給按鈕對象的onclick屬性賦值-->
btnObj.onclick=doSome;//注意寫函數名即可,不需要小括號,將會調函數doSome註冊到click事件上。

<!--或者直接用:-->

document.getElemetById("mybth2").onclick=function(){//匿名函數,在click事件發生後纔會調用。
	alert("test2");
}
</script>

對於以上程序來說,sayHello函數被其他程序調用。
即自己的寫的函數被別人調用了。
在這裏插入圖片描述

02.JS代碼的執行順序

如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Js代碼的執行順序</title>
</head>
<body>
<script type="text/javascript">
   document.getElementById("btn").onclick=function () {
        alert("hello ");
   }
</script>
<input type="button" value="hello" id="btn">
</body>
</html>

會報錯:在id=”btn“的元素還沒有加載到內存時就執行了document.getElementById(“btn”).οnclick=function () {
alert(“hello”);
}

改進:
頁面加載完畢後,load事件發生。然後執行read()函數。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Js代碼的至此那個順序</title>
</head>
<body onload="read()">
<script type="text/javascript">
    function read() {
        document.getElementById("btn").onclick = function () {
            alert("hello")
        }
    }
</script>
<input type="button" value="hello" id="btn">
</body>
</html>

或者用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Js代碼的至此那個順序</title>
</head>
<body >
<script type="text/javascript">
   /* window.οnlοad=read;
    function read() {
        document.getElementById("btn").onclick = function () {
            alert("hello")
        }
    }*/
    //或者,頁面加載完畢後,load
    window.onload=function () {
        document.getElementById("btn").onclick = function () {
            alert("hello")
        }
    }
</script>
<input type="button" value="hello" id="btn">
</body>
</html>

將文本框改爲複選框:
需要掌握的點:
一個節點對象中只要有屬性都可以"."
然後可以更改其值。

如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>設置節點屬性</title>
</head>
<script>
    onload=function () {
        document.getElementById("btn").onclick=function () {
            var mytext =document.getElementById("mytext");
            mytext.type="checkbox";
        }
    }
</script>
<input type="text" id="mytext"/>
<input type="button" value="將文本框改爲複選框" id="btn">
</body>
</html>

03.Js捕捉回車鍵

需求:在網頁登錄賬戶時,將用戶名和密碼填寫完成後需要用回車鍵確定登錄。

回車鍵的鍵值:13
ESC鍵的鍵值:27

對於“鍵盤事件對象”都有keyCode屬性來獲取鍵值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>捕捉回車鍵</title>
</head>
<body>
    <script type="text/javascript">
            window.onload=function () {
                var usernameElt =document.getElementById("username");
                usernameElt.onkeydown=function (event) {
                    //獲取鍵值
                    if(event.keyCode==13){
                        alert("登錄中...");
                    }
                }
            }
    </script>
    <input type="text" id="username">
</body>
</html>

在這裏插入圖片描述

04.JS的運算符

1.void運算符

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>void</title>
</head>
<body>
頁面頂部
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<!--把href後面的路徑消失,使頁面不跳轉,
void運算符:執行表達式,但不返回任何結果
而:javascript:代碼表示void()是一條JS代碼而非路徑。-->
    <a href="javascript:void(0)" onclick="window.alert('fade')">
        保留超鏈接的樣式,同時用戶點擊該超鏈接的時候執行一段JS代碼,單頁面不能跳轉
    </a>
</body>
</html>

05.JS的控制語句

1.if
2.switch
3.whilc
4.do…while…
5.for
6.break
7.continue
以上控制語句在其它語言都有涉及。如c,c++,Java…

8.for…in語句

如何創建JS數組?

var arr =[false,ture,..];//數組中數據類型隨意放,類似於python的類表

遍歷數組:

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

for(var i in arr){//類似於python
alert(arr[i]);
}
//for..in可以遍歷對象的屬性
User = function(username,password){
	this.username=username;
	this.password=password;
}
var u=new User("LiSi","afadfj13");
alert(u.username+","+u["password"]);
for(var ShuXingMing in u){
alert(u[ShuXingMing]);
}

9.with語句
形如:
alert(u.username);
alert(u.password);
可以改爲:
with(u){
alert(username);
alert(password);
}
在這裏插入圖片描述

06.設置和獲取文本框的value(DOM編程)

1.JavaScript;JS的核心語法。(ES規範/ECMA-262標準)
2.DOM:Document Object Model (文檔對象模型,對網頁當中的節點進行增刪改的過程。)HTML文檔別當做一棵樹DOM樹來看待。
var domObj = document.getElementById(“id”);
3.BOM:Browser Object Model(瀏覽器對象模型)
如:關閉和打開瀏覽器窗口,後退,前進,瀏覽器地址欄上的地址,都是屬於BOM編程。

DOM和BOM的區別和聯繫:
BOM的頂級對象是:window
DOM的頂級對象是:document

實際上BOM是包括DOM的:
如:

window.onload=function(){
var btnElt=document.getElementById("btn")alert(btnElt);
}

在這裏插入圖片描述
4.獲取文本框value

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>獲取文本框的value</title>
</head>
<body>
    <script>
        window.onload=function(){
            var fad=document.getElementById("btn");
            fad.onclick=function () {
                //獲取username節點
                /*var fadName=document.getElementById("username");
                var ss=fadName.value;
                alert(ss);*/

                //或者
                /*alert(document.getElementById("username").value);*/

                //修改value
                alert(document.getElementById("username").value="Hello Meng!");
            }
        }
    </script>
    <input type="text" id="username"/>
    <input type="button" value="獲取文本框的value" id="btn"/>
    <hr>
    <script type="text/javascript">
        window.onload=function () {
            document.getElementById("bai").onclick=function () {
                //獲取第一個框的值
                document.getElementById("username3").value=document.getElementById("username2").value;
            }
        }
    </script>
    <input type="text" id="username2"/><br>
    <input type="text" id="username3"/><br><br><br>
    <input type="button" value="降低一個文本款的value複製到第二個文本框" id="bai"/>

<!--    blur事件:失去焦點事件,以下代碼中的this
代表的是當前input節點對象,this.value就是這個節點的value屬性-->

   <input type="text" onblur="alert(this.value)">
</body>
</html>

5.innerHTML和innerText操作div和span
兩者的相同點和區別:
相同點:都是設置元素內部的內容
不同點:
innerHTML會把後面的字符串當作一段HTML代碼解釋並執行。不是HTML當作普通文本輸出。

而innerText後面的字符串就算是一段HTML代碼,也會當作文本。

07.正則表達式

1.什麼是正則表達式
正則表達式:Regular Expression
正則表達式主要用在字符串格式匹配方面。

2.正則表達式實際上是一門獨立的學科,在Java語言中支持,c語言中也支持,javascript中也支持。

大部分編程語言都支持正則表達式。正則表達式最初使用在醫學方面。用來表示神經符號等。目前使用最多的是計算機編程領域。用作字符串匹配。包括搜索方面等。

3.正則表達式學習要求
第一:常見的正則表達式符號要認識
第二:簡單的正則表達式要會寫
第三:別人寫的正則表達式要看得懂
第四:在javascript當中,怎麼創建正則表達式對象
第五:在javascript當中,正則表達式對象有哪些方法。
第六:要能夠快速的從網絡上找到自己需要的正則表達式。並且測試其有效性。

4.常見的正則表達式符合:

.    匹配除換行符以外的任意字符
\w   匹配字母或數字或下劃線或漢字
\s   匹配任意的空白符
\d   匹配數字
\b   匹配單詞的開始或結束
^    匹配字符串的開始
$    匹配字符串的結束

\W   匹配不是字母或數字或下劃線或漢字的字符
\S   匹配任意不是空白符的字符
\D   匹配任意非數字的字符
\B   匹配不是單詞的開始或結束的位置
[^x]  匹配除了x以外的任意字符
[^aeiou]  匹配除了aeiou這幾個字母以外的任意字符


* 重複0次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,}重複n次或更多次
{n,m}重複n到m次

[1-9] 表示19中的任意字符
[A-Za-z0-9] 表示A-Z,a-z,0-9中的任意一個字符。
[A-Za-z0-9-] 表示A-Z,a-z,0-9,-,中的任意一個字符。

5.簡單的正則表達式要會寫
QQ號的正則表達式:

^[1-9][0-9]{4,}$

6.別人寫的正則表達式要看得懂
email正則表達式:

^\w+([-+.]\w+)*@\w+([-.]\w)*\.w+([-.]\2+)*$

7.javascript當中,怎麼創建正則表達式對象

第一種創建方式:
var fox=/正則表達式/flags;

第二種創建方式:
var fox=new RegExp("正則表達式","flags");

關於flags:
	g:全局匹配
	i:忽略大小寫
	m:多行搜索(ES規範制訂以後才支持使用m)當前面是正則表達式的時候,m不能使用。

正則表達式的text()方法。
ture/false=正則表達式.text(用戶填寫的字符串);
ture:字符串格式匹配成功
false:字符串格式匹配失敗

在這裏插入圖片描述
改進:
在這裏插入圖片描述
trim函數去除字符串的前後字符
在這裏插入圖片描述
在這裏插入圖片描述

08.表單驗證(重點)

要求:
1.用戶名不能爲空
2.用戶名必須在6-14位之間
3.用戶名只能由數字和字母組成,不能含有其他符號(正則表達式)
4.密碼和確認密碼一致,郵箱地址合法
5.同意失去焦點驗證
6.錯誤提示信息統一在span標籤中提示,並且要求12號,紅色
7.文本框再次獲得焦點後,清空錯誤提示信息信息

直接看代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表單驗證</title>
    <style type="text/css">
        span{
            color: red;
            font-size: 12px;
        }
    </style>
</head>
<body>
    <script type="text/javascript">
        /**
         * 1.用戶名不能爲空
         * 2.用戶名必須在6-14位之間
         * 3.用戶名只能由數字和字母組成,不能含有其他符號(正則表達式)
         * 4.密碼和確認密碼一致,郵箱地址合法
         * 5.同意失去焦點驗證
         * 6.錯誤提示信息統一在span標籤中提示,並且要求12號,紅色
         * 7.文本框再次獲得焦點後,清空錯誤提示信息信息
         */
        //1.用戶名不能爲空
        window.onload=function () {
                //獲取username的span標籤對象
                var usernameErrorSpan=document.getElementById("usernameError");

                //獲取用戶名標籤對象
                var nameEle=document.getElementById("username");
                nameEle.onblur=function () {
                    //獲取用戶名
                    var name=nameEle.value;
                    //去除用戶名的前後空格
                    name=name.trim();
                    if(name===""){
                        usernameErrorSpan.innerText="用戶名不能爲空";
                    }
                    else{
                        //2.長度不同
                        if(name.length<6||name.length>14) {
                            usernameErrorSpan.innerText="用戶名不合法:用戶名長度應在6到14之間";
                        }
                        else{
                            //長度合法,繼續判斷用戶名是否有非法字符
                            var fff=/^[A-Za-z0-9]+$/;
                            var ok=fff.test(name);
                            if(ok){
                                //用戶名最終合法

                            }
                            else{
                                //用戶名有非法字符
                                usernameErrorSpan.innerText="用戶名只能由數字和字母組成";
                            }
                        }
                    }
                }
                //給username這個文本框綁定獲得焦點事件
                nameEle.onfocus=function () {
                    //清空非法value
                    if(usernameErrorSpan.innerText!=""){
                        nameEle.value="";
                    }
                    //清空span裏的錯誤提示信息
                    usernameErrorSpan.innerText="";
                }


            //獲取密碼框對象
            var passcode1Ele=document.getElementById("passcode1");
            //獲取確認密碼框對象
            var passcode2Ele=document.getElementById("passcode2")
            //獲取確認密碼框提示sapn對象
            var passcode2ErorrSpan=document.getElementById("passcode2Error");
                //給第二個密碼框綁定blur事件
                passcode2Ele.onblur=function () {

                    //獲取密碼
                    var passcode1=passcode1Ele.value;
                    //獲取確認密碼
                    var passcode2=passcode2Ele.value;
                    if(passcode1!=passcode2){
                        passcode2ErorrSpan.innerText="前後密碼輸入不一致!"
                    }
                    else{
                        //密碼一致
                    }
                }

                //給密碼框綁定focus事件,用來,當前後密碼不一致時清空密碼
                passcode2Ele.onfocus=function () {
                    if(passcode2ErorrSpan.innerText!=""){
                        passcode2Ele.value="";
                       passcode1Ele.value="";
                    }
                    passcode2ErorrSpan.innerText="";
                }

                //郵箱,獲取eamil標籤對象
            var emialEle=document.getElementById("email");
                //獲取email的span對象
            var emailErrorSpan=document.getElementById("emailError");
            //給email標籤綁定onblur事件
            emialEle.onblur=function () {
                //獲取email
                var email=emialEle.value;
                //獲取email的正則
                var fff=/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
                var ok=fff.test(email);
                if(ok){

                }
                else{
                    emailErrorSpan.innerText="郵箱地址不合法!";
                }
            }
            //給email綁定focus
            emialEle.onfocus=function () {
                if(emailErrorSpan.innerText!=""){
                    emialEle.value="";
                }
                emailErrorSpan.innerText="";
            }

            //給提交按鈕綁定鼠標單擊事件
            //獲取提交按鈕對象
            var submitEle=document.getElementById("submit1");
            submitEle.onclick=function () {
                //觸發username的blur,passcode的blur
                //不需要人工操作
                nameEle.focus();
                nameEle.blur()

                passcode2Ele.focus();
                passcode2Ele.blur();

                emialEle.focus();
                emialEle.blur();
                //當所有表單都合法時
                if(usernameErrorSpan.innerText==""&&passcode2ErorrSpan.innerText==""&&emailErrorSpan.innerText==""){
                    var userFormEle=document.getElementById("userForm");
                    userFormEle.submit();
                }
            }
        }
    </script>
    <form id ="userForm" action="http://localhost:8080/jd/save" method="post">
        用戶名<input type="text" name="username" id="username"/>
        <span id="usernameError"></span><br>
        密碼<input  type="text" id="passcode1"/><br>
        確認密碼<input type="text" id="passcode2"/>
        <span id="passcode2Error"></span><br>
        郵箱<input type="text" name="email" id="email"/>
        <span id="emailError"></span><br>
        <input type="button" value="註冊" id="submit1"/>&nbsp;
        <input type="reset"  value="重置"/>
     </form>
</body>
</html>

不要因爲怕被玫瑰的刺傷到你,就不敢去摘玫瑰。我是夢陽辰,期待與你相遇!

關注公衆號【輕鬆玩編程】回覆關鍵字“電子書”,“計算機資源”,“Java從入門到進階”,”JavaScript教程“,“算法”,“Python學習資源”,“人工智能”等即可獲取學習資源。在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章