從零開始學_JavaScript_系列(八)——js系列(2)(事件觸發順序、文本讀取、js編寫ajax、輸入驗證、下來菜單)

來源:互聯網
上載者:User

從零開始學_JavaScript_系列(八)——js系列(2)(事件觸發順序、文本讀取、js編寫ajax、輸入驗證、下來菜單)

(20)事件觸發的順序

假如文檔中有多個指令碼(例如自動執行的指令碼),那麼他們執行是有一定的順序的(在HTML文檔之中):

①先執行內的<script>標籤。因此,這裡的js指令碼通常是內嵌程式碼、指向JS檔案,可以在這裡定義其後要使用的函數;

②其次是執行內的script標籤;

③然後是執行觸發的指令碼內容,例如在button按鈕上添加的onclick=””命令,就是在點擊後觸發的。


(21)文件物件模型(DOM)

文件物件模型(Document Ojbect Model),效果是允許指令碼控制Web頁面、視窗、文檔。對於JS來說,他是製作動態網頁面的強有力工具。

DOM不是JavaScript語言的一個部分,而是內建於瀏覽器的一個API(介面),

為了操縱瀏覽器和文檔,JavaScript使用分層的父物件和子物件(樹形結構),這就稱為DOM,表示一個Web文檔的所有內容和組件。

DOM對象,有屬性和方法。

①最頂層的是window對象,表示一整個瀏覽器介面,架構可以由window對象來表示。如alert就是window對象的方法

②document對象代表的是一個web文檔或一個頁面,web文檔在瀏覽器視窗中顯示,所以很明顯document對象是window對象的子物件;

因此window.document和document都是指當前視窗;

如果使用多個視窗(或架構),就要使用多個window對象,每個window對象都有自己的document對象,因此使用其中某一個,要指出視窗名和對象名;

(22)獲得文檔的資訊

①document.http://blog.csdn.net/qq20004604/article/details/URL指明了文檔的http://blog.csdn.net/qq20004604/article/details/URL地址,這是一個簡單的文字欄位,不能改變它的屬性(不懂,是指這個是一個string對象嗎?);

如果要給使用者一個不同的地址,要使用window.location對象;

②document.title列出了當前頁面的標題,由HTML中的title標籤定義。

如:

ti=document.title;

alert(ti);

效果是輸出標題,注意,沒有括弧;

③document.referrer是使用者所瀏覽的上一個頁面的http://blog.csdn.net/qq20004604/article/details/URL地址;

④document.lastModified是文檔最後修改日期,這個日期從伺服器傳到頁面(註:在360瀏覽器裡,這個時間是變化的,在Firefox裡,這個時間是固定的)但可能伺服器上運行正常,需要驗證;

⑤document.bgColor和document.fgColor是文檔的背景和前景(文字)顏色,對應body下的BGCOLOR屬性和TEXT屬性;

例如:

abc

<script>

ti=document.bgColor;

alert(ti);

</script>

輸出是green,背景色變綠

⑥document.linkColor、document.alinkColor和document.vlinkColor是文檔中連結的顏色。分別對應body標籤中的LINK、ALINK和VLINK屬性(但不知道這3個是什麼意思)。

⑦document.cookie允許讀取和設定一個文檔的cookie。更多略。

(23)history對象

一個可訪問的屬性:

history.length,使用者訪問過的不同地址的數目。

如代碼,表示當前訪問過的地址的數目

<script>

alert(history.length);

</script>

初始是1,假如訪問了一個其他網頁,這裡則彈出是2,如果訪問更多,則相應增加。

方法一:

history.go(參數)

開啟曆史列表的一個網址,參數為正數或者負數。

history(-1)相當於後退一步。

方法二:

history.back()載入曆史列表中的前一個網址,相當於按一下後退。

方法三:

history.forward()載入曆史列表中的後一個網址,相當於按一下前進按鈕。


(24)AJAX

傳統情況下,JavaScript與伺服器之間的通訊方法只有一種——表單。

1、前端/網頁:建立一個XMLHttpRequest對象,然後將其發送給Web伺服器,並且無需一直等待請求,而是可以繼續發送請求。

2、伺服器:通過發送包含內容的檔案(或伺服器端應用程式的輸出)作為相應。

3、前端:當接到伺服器端的響應後,相應的JavaScript函數將被觸發,以處理相關資料。

4、DOM:由於這項技術的目的在於實現更好的互動(否則接受到伺服器資訊就得重新整理頁面),因此指令碼使用DOM來顯示來自伺服器的資料,從而無需再次重新整理頁面。

其他:可以同時處理多個請求(發送多個請求,伺服器的速度不影響前端的)。

AJAX的應用:

主要用於建立Web程式——面向使用者且基於Web的服務。

使用XMLHttpRequest:(表示純看概念很茫然啊)

1、建立請求

建立一個XMLHttpRequest對象:

var ajaxreq = new XMLHttpRequest();

註:IE5/6除外(早版本的需要啟用ActiveX控制項),文法不同;

2、開啟http://blog.csdn.net/qq20004604/article/details/URL

ajaxreq.open("get", "filename");

可以使用GET或者POST命令(這裡是get);

由於GET需要使用將參數作為地址發送給伺服器,因此如例子:

ajaxreq.open("get", "search.php?query=abc");

訪問search.php網頁,將abc作為查詢參數發送給伺服器。

問題:為什麼是query?

3、發送請求

ajaxreq.send(null);

註:get方法用null,post方法用發送的資料。

4、等待響應:

XMLHttpRequest提供了專門的事件處理常式,用於處理伺服器的返回資訊。

ajaxreq.onreadystatechange = MyFunc;

請求(request)對象擁有一個名為readyState的屬性,代表一個請求的目前狀態。

當readyState屬性發生變化時,該事件被觸發。

ReadyState屬性值的變化範圍如下:

0 新的請求;

4 已結束的請求

所以事件處理常式會檢測該屬性,查看其值是否已變化為4。

由於可能發生錯誤,因此當請求成功時,status將被設定為200。但若發生錯誤,其值將被設定為對應的錯誤碼。

與錯誤相關的解釋資訊(成功時為OK),將被儲存在statusText屬性中。

5、解釋響應資料

當readyState屬性的值為4,而且請求已被響應時,可以通過另外兩個屬性進一步訪問那些來自伺服器的返回資料。

responseTeXt 用於訪問以原始文本存在的響應資訊;

responseXML 用於訪問以XML對象形式存在的響應資訊。

當資料格式不是XML時,只有文字屬性可被訪問。

這裡的XML指的是.xml檔案嗎?

如代碼:

//AJAX庫

var ajaxreq = false, ajaxCallback;

function ajaxRequest(filename)

{

try

{

//Firefox / IE7 /Others

ajaxreq = newXMLHttpRequest();

}

catch(error)

{

try

{

ajaxreq = newActiveXObject("Microsoft.XMLHTTP");

}

catch(error)

{

return false;

}

}

ajaxreq.open("GET",filename);

ajaxreq.onreadystatechange= ajaxResponse;

ajaxreq.send(null); //發送請求

}

//事件處理常式

function ajaxResponse()

{

if(ajaxreq.readyState != 4)return ;

if(ajaxreq.status = 200)

{

//事件正常,請求成功

if(ajaxCallback)ajaxCallback();

}

else

{

alert("Requestfailed" + ajaxreq.statusText);

}

return true; //為什麼return true?只要readyState等於4就一定成功?

}

ajaxRequest()函數:

實現了處理、建立、發送XMLHttpRequest對象所需的全部操作。

該函數首先會建立XMLHttpRequest對象。此時,對於不同的瀏覽器需要使用不同的命令。如果使用了錯誤的命令就一定會出現錯誤。

所以需要使用try和catch語句。

先試著使用標準方式,出錯了使用另一種方式(這裡是針對IE5和IE6的),如果還不行,那麼返回一個false值給ajaxreq,然後通過條件判斷,告訴使用者瀏覽器不支援AJAX功能。

ajaxResponse()函數:

ajaxResponse()函數是onreadystatechange事件的處理常式。

該函數首先檢查readyState屬性,查看其值是否為4。如果不是,什麼都不做(return)

如果是4,那麼檢查屬性值是否為200(是200說明成功),是的話,執行儲存於變數ajaxCallback中的處理函數。

如果不是200,說明出錯了,alert彈框提示出錯資訊。

使用AJAX庫:

①將庫檔案儲存為ajax.js,並使其與HTML和指令碼位於同一目錄中。

②利用<scriptsrc="ajax.js">匯入HTML中。

③為請求結束事件建立一個處理函數,並將變數ajaxCallback的值設定為該函數。

④調用ajaxRequest()函數,其參數為伺服器端應用程式(或檔案)的檔案名稱。(本庫只支援GET,因此不考慮POST,也無需指定使用方式)。

⑤如果請求操作正常結束,那麼將調用剛才在ajaxCallback中指定的函數。同時全域變數ajaxreq將會把伺服器的響應資料分別儲存在responseXML和responseText屬性中。

使用AJAX庫編寫AJAX測驗程式:

在建立了一個可重用的AJAX庫後,就可以用他來建立JS程式。

JS代碼例子如下;

var qn = 0; //qn是問題編號

function getQuestions()

{

qn = 0; //點擊開始按鈕後,重設問題

obj =document.getElementById("question"); //obj是question的(HTML)

//之所以設定下面這行,是因為在非同步載入成功前顯示這裡

obj.firstChild.nodeValue="(pleasewait)"; //obj的所有子節點中的第一個子節點的值是please wait。作用是將其寫到...中

ajaxCallback =nextQuestion; //將函數賦給回呼函數(ajaxCallback),在ajax裡調用

ajaxRequest("questions.xml"); //調用ajax庫載入questions.xml檔案

}

//作用是讀取、並輸出問題

function nextQuestion()

{

questions =ajaxreq.responseXML.getElementsByTagName("q"); //questions被賦值為AJAX返回的XML檔案中標籤為q的(在XML中)

obj =document.getElementById("question"); //obj為標籤是question(在AJAX.html中)

if( qn

{

q =questions[qn].firstChild.nodeValue; //q是讀取的值

obj.firstChild.nodeValue= q; //將其輸入到HTML中顯示

}

else

{

obj.firstChild.nodeValue= "(no more questions)"; //如果沒有更多問題了,那麼提示使用者

}

}

function checkAnswer()

{

answers =ajaxreq.responseXML.getElementsByTagName("a"); //answers是一個數組(因為有多個標籤)

a =answers[qn].firstChild.nodeValue; //firstChild.nodeValue指所有子節點(childNodes)中的第一個子節點的文本值

answerfield =document.getElementById("answer"); //HTML輸入位置的內容(id是answer)的值

if(a == answerfield.value) //如果讀取的值(XML中的),和輸入的值(HTML使用者輸入的)一樣

{

alert("Correct!"); //彈框提示正確

}

else

{

alert("Incorrect.The correct answer is: " + a); //彈框提示錯誤,並告知正確的答案

}

qn += 1; //問題編號+1

answerfield.value=""; //重設答案

nextQuestion(); //調用函數

}

obj = document.getElementById("startq"); //ojb是startq按鈕

obj.onclick = getQuestions; //點擊後調用函數,不用()表示不執行,只有當點擊後才執行

ans = document.getElementById("submit"); //ans是提交按鈕

ans.onclick = checkAnswer; //點擊後調用函數

另有一XML檔案:

a

1

b

2

c

3

d

4

e

5

最後是html檔案:

AJAX測試

<scriptsrc="ajax.js"></script>

AJAX的測試例子

<scriptsrc="quiz.js"></script>

效果是:

①點擊Start the Quiz按鈕後,讀取XML檔案,將讀取到的問題輸出在html上。

②答案框可以用於輸入答案,按submit按鈕提交答案。

③提交後進行驗證,如果和預留答案相符,提示,不符,提示正確答案。

④然後變更到下一個問題。

(25)name

name的作用和id類似。

但還有一些其他用處:

l 用途1:作為可與伺服器互動資料的HTML元素的伺服器端的標示,比如input、select、textarea、和button等。我們可以在伺服器端根據其Name通過Request.Params取得元素提交的值。

l 用途2: HTML元素Input type='radio'分組,我們知道radio button控制項在同一個分組類,check操作是mutex的,同一時間只能選中一個radio,這個分組就是根據相同的Name屬性來實現的。

l 用途3:建立頁面中的錨點,我們知道link是獲得一個頁面超級連結,如果不用href屬性,而改用Name,如:,我們就獲得了一個頁面錨點。

l 用途4:作為對象的Identity,如Applet、Object、Embed等元素。比如在Applet對象執行個體中,我們將使用其Name來引用該對象。

l 用途5:在IMG元素和MAP元素之間關聯的時候,如果要定義IMG的作用區,需要使用其屬性usemap,使usemap="#name"(被關聯的MAP元素的Name)。

l 用途6:某些特定元素的屬性,如attribute,meta和param。例如為Object定義參數或Meta中。



(26)驗證輸入內容是不是空,是不是數字

field為檢查所內容(input)的id

function checkIsNumber(field) //檢查輸入的文字是不是數字,這的field是id的值

{

with(field)

{

if(value==null||value=="")

{

document.getElementById(field).innerText="請輸入內容";

}

else {

if(value>0)

{

returnfalse;

}

else {

document.getElementById(field).innerText="請輸入數字";

}

}

}

return true;

}


(27)下拉式清單


如果帶預設選擇(即預設不是第一個),加上下面紅色部分(即預設選擇這個)

1 2 3 4



(28)div、span、ul的區別

①div是一個塊,佔用的位置是一行,不同div之間內建換行。

例如:fffwwwppp

其顯示是:

fff

www

ppp

②span是行內小塊,是不帶換行的。

例如:fffwwwppp

其顯示是:fffwwwppp

③ul目前已知是內建縮排的。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.