javascript學習隨筆(編寫瀏覽器指令碼 Navigator Scripting )

來源:互聯網
上載者:User
文章目錄
  • 在 HTML 中使用JavaScript
  • 編寫事件處理常式指令碼(Scripting Event Handlers)
  • 技巧與技術

在 HTML 中使用JavaScript

JavaScript能以兩種方式嵌入HTML:

  • 作為語句和函數使用時,用 SCRIPT 標記
  • 作為事件處理常式使用時,用 HTML 標籤
SCRIPT 標記

使用SCRIPT標記把指令碼嵌入在HTML中,格式如舷:

<SCRIPT>
_ JavaScript 語句
</SCRIPT>

LANGUAGE屬性作為可選項,用於指定指令碼語言,用法如下:

<SCRIPT LANGUAGE="JavaScript">
_JavaScript 語句
</SCRIPT>

</SCRIPT>是<SCRIPT>的結束標誌,之間可以包括任意多的JavaScript語句.

JavaScript是區分大小寫檔

例1 一個簡單的指令碼

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
document.write("Hello net.")
</SCRIPT>
</HEAD>
<BODY>
That's all, folks.
</BODY>
</HTML>

例1中的頁面顯示:

Hello net.That's all folks.

代碼隱匿

在不識別JavaScript的舊版本瀏覽器上,可以把指令碼放置在注釋域中,這樣JavaScript代碼就不會被顯示出來. 把整個指令碼用HTML的注釋標記括起來:

<!-- 開始隱匿的指令碼內容,不被舊版本瀏覽器顯示
// 隱匿在此結束. -->

定義和調用函數

在頁(page)被裝載後,被置於SCRIPT標記之間的指令碼被分析.函數被存貯起來,但並未執行. 函數由頁內的事件調用執行.

正確理解定義函數與調用函數之間的區別是很重要的,定義函數僅僅是命名了這個函數和說明當此函數被調用時做什麼,而調用函數才利用傳來的參數真正執行指定的動作.

例2 一個帶有函數和注釋的指令碼

<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!-- 開始隱匿的指令碼內容,不被舊版本瀏覽器顯示
 function square(i) {
  document.write("The call passed ",i, " to the function.","<BR>")
  return i*i
 }
  document.write("The function returned ",square(5),".")
// 隱匿在此結束. -->
</SCRIPT>
</HEAD>
<BODY>
<BR>
All done.
</BODY>

例2中的頁面顯示:

We passed 5 to the function.
The function returned 25.
All done.

HEAD標記

通常,應該在文檔的HEAD部分定義頁(page)的所有函數,因為HEAD被首先裝載,這就保證了使用者做任何可能調用函數的動作前,函數已全部裝載.

例3 有兩個函數的指令碼.

<HEAD>
<SCRIPT>
<!--- hide script from old browsers
function bar() {
 document.write("<HR ALIGN='LEFT' WIDTH=25%>")
}
function output(head,level,string) {
 document.write("<H" + level + ">" + head + "</H" + level + "><p>" + string)
}
// end hiding from old browsers -->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT>
<!--- hide script from old browers
document.write (bar(),output("Make Me Big",3,"Make me ordinary."))
// end hiding from old browsers -->
</SCRIPT>
<P>
Thanks.
</BODY>

例3的結果:

Make Me Big
Make me ordinary.undefinedundefined
Thanks.

引號

用單引號(')把字串常量括起來,用雙引號把屬性的值括起來,這樣指令碼能夠把二者區分開. 在上個例子中, 函數bar中,常量left被放在屬性值.再舉一個例子:

<INPUT TYPE="button" VALUE="Press Me" onClick="myfunc('astring')">

編寫事件處理常式指令碼(Scripting Event Handlers)

Navigator上的JavaScript應用程式大部分是事件驅動的,事件常常是使用者動作的結果. 例如: 按動按鈕是一個事件, 結果是把focus賦與一個form元素.Navigator能夠識別一組特定的事件. 你可以定義event handlers指令碼,這些指令碼在事件發生時會被自動執行.

事件處理常式是作為HTML標記的屬性放在文檔中的,把要執行JavaScript代碼賦給HTML標記. 文法如下:

<TAG eventHandler="JavaScript Code">

其中, TAG是HTML的某一標記, eventHandler是事件處理常式的名稱.

例如, 假定已建立了一個名為compute的JavaScript函數,你可以把對該函數的調用賦給這個按鈕的onClick事件處理常式,從而實現當使用者按此按鈕時,Navigator執行函數compute.

<INPUT TYPE="button" VALUE="Calculate" onClick="compute(this.form)">

你可以把任何JavaScript語句放在onClick後的引號內,多個語句之間用分號隔開.這些語句只在當使用者按動此按鈕時才被執行.

一般說來,把自己的事件處理常式定義成函數是一種好習慣,因為:

  • 這使你的代碼模組化--- 同一個函數可以作為多個不同item的事件處理常式.
  • 這使你的代碼容易讀懂.

請注意,在此例中,使用this.form來引用當前form, 關鍵字this用來引用當前對象,此處即指button對象,於是this.form結構被用來引用包含此button的form. 上例中onClick事件處理常式是以this.form(當前form)為參數調用compute()函數.

能用於HTML標記中的事件如下:

  • Focus, Blur, Change事件: 文本域,文本區和選擇
  • Click事件: 按鈕,無線按鈕,核對框,遞交按鈕,複位按鈕,連結
  • Select事件: 文本域,文本區
  • MouseOver事件: 連結

如果一事件可用在HTML標記裡, 則可以給它定義事件處理常式.通常事件處理常式的名稱是以on開頭,後跟事件名稱. 如, Focus的處理常式名為onFocus.

許多個物件有類比事件的方法(method).如,button有一個名為click的方法能類比按鈕被按下. 注意: 類比事件的方法不能觸發事件處理常式.如方法click並不能觸發事件處理常式onClick. 但是,你可以直接呼叫事件處理常式(如,在指令碼中,顯式調用onClick).

事件 何時發生 事件處理常式
blur 使用者將input focus從form元素上移去 onBlur
click 使用者在form元素或串連上接動滑鼠 onClick
change 使用者改變了文本,文本區或選擇元素的值 onChange
focus 使用者把input focus賦給form元素 onFocus
load 使用者把頁裝入Navigato onLoad
mouseover 使用者把滑鼠游標從link或anchor上移過 onMouseOve
select 使用者選擇了form元素的輸入欄位 onSelect
submit 使用者提交了一個form onSubmit
unload 使用者退出此頁 onUnload
例4 有一個form和一個event handler屬性的指令碼

<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function compute(form) {
 if (confirm("Are you sure?"))
  form.result.value=eval(form.expr.value)
 else
  alert("Please come back again")
}
</SCRIPT>
</HEAD>

<BODY>
<FORM>
Enter an expression:
<INPUT TYPE="text" NAME="expr" SIZE=15>
<INPUT TYPE="button" VALUE="Calculate" ONCLICK="compute(this.form)">
<BR>
Result:
<INPUT TYPE="text" NAME="expr" SIZE=15>
<BR>
</FORM>
</BODY>

例4中的頁面顯示

技巧與技術

本節介紹幾種有用的編寫指令碼的技術

更新頁(Updating Pages)

在Navigator上JavaScript是按從頁的頂部到下的順序產生結果. 一旦有些東西被重新設計(format),你只能靠重新裝載此頁的辦法來改變,目前,你只能更新整 個頁, 而不能只更新某一部分. 但是你可以單獨更新frame中的"sub-window".

列印

目前, 還不能把用JavaScript產生的輸出列印出來. 例如,若你的頁上有如下內容,

<P>This is some text
<SCRIPT>document.write("<P>And some generated text")</SCRIPT>

當列印時,你只會打出"This is some text", 即使你能在螢幕上看到兩行.

使用引號

一定要區分雙引號和單引號,因為在HTML中事件處理常式必須用雙引號 括起來,參數用單引號,例如:

<FORM NAME="myform">
<INPUT TYPE="button" NAME="button1" VALUE="Open Sesame!"
onClick="window.open('stmtsov.html', 'newWin','toolbar=no,directories=no')">
</FORM>

另外,你可以用前置反斜線(\)對引號進行轉義.

定義函數

在HTML頁的HEAD部分定義全部函數是一個好習慣.這樣,在顯示任何內容之前, 所有函數均已定義.否則在頁還在裝載時,使用者可能做一些事情觸發事件處理常式, 調用了未定義函數,將導致錯誤.

建立數組

數組是一個有序的值的集合,利用數組名和索引來引用.例如,一個名為emp的數組存放著僱員的名字,並按僱員編號索引.於是,emp[1]是1號僱員,emp[2]是2號僱員, 依次類推.

JavaScript中沒有明確的數組資料類型,但由於數組與對象有類似之處(見 JavaScript Object Model),在JavaScript中,很容易建立數組.你可以定義一個 數組物件類型如下:

function MakeArray(n) {
 this.length=n;
 for (var i=1; i <= n; i++)
  this[i] = 0
  return this
 }
}

這樣就定義了一個數組,第一個屬性length表示數組中元素個數(索引為0),其餘各屬性初始值為0,索引為大於等於1的整數.

調用new時帶上數組名和數組元素的個數,就建立了一個數組.

emp=new makeArray(20);

該語句建立了一個名為emp的數組,有20個元素,初始值為0.

運算元組(Populating an Array)

通過給數組元素賦值的辦法來運算元組.如:

emp[1]="Casey Jones"
emp[2]="PHil Lesh"
emp[3]="August West"

等等.

還可以建立對象的數組.如,定義一個名為Employees的物件類型:

function Employee(empno,name,dept) {
 this.empo= empno;
 this.name= name;
 this.dept= dept;
}

下列語句則建立了一個此對象的數組:

emp=new MakeArray(3)
emp[1]=new Employee(1,"Casey Jones", "Engineering")
emp[2]=new Employee(2,"Phil Lesh", "Music")
emp[3]=new Employee(3,"August",""Admin)

這時,利用函數show_props(在JavaScript Object Model中定義)來顯示該 數組中的對象, 如下:

for (var n=1; n<=3; n++) {
 document.write(show_props(emp[n],"emp")+"");
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.