[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
]]>這也就是說(shuō),VBScript 與 Jscript 兩種腳本語(yǔ)言既能應(yīng)用與客戶(hù)端,也能應(yīng)用與服務(wù)端。看看下面的例子:
<script language=”vbscript”>
<!–
//客戶(hù)端腳本vbs
response.write “demo text…” //不區(qū)分大小寫(xiě),語(yǔ)法相當(dāng)寬松
–>
</script>
<script language=”Javascript”>
<!–
//客戶(hù)端腳本js
document.write(“demo text…”) //內(nèi)置對(duì)象必須區(qū)分大小寫(xiě)
–>
</script>
<script language=”vbscript” runat=”server” >
<!–
//服務(wù)端腳本vbs
response.write “demo text…” //不區(qū)分大小寫(xiě),語(yǔ)法相當(dāng)寬松
–>
</script>
<script language=”javascript” runat=”server” >
<!–
//服務(wù)端腳本js
Response.Write(“demo text…”) //ASP內(nèi)置對(duì)象必須區(qū)分大小寫(xiě) –>
</script>
或者:
<%@LANGUAGE=”JAVASCRIPT”%> //放在服務(wù)端頁(yè)面第一行,表示該頁(yè)默認(rèn)使用Javascript腳本,在頁(yè)面的其他地方使用<%’code…%>,解釋器就認(rèn)為這是第一行定義的語(yǔ)言
<%@LANGUAGE=”VBSCRIPT”%> //放在服務(wù)端頁(yè)面第一行,表示該頁(yè)使用VBSCRIPT腳本,在頁(yè)面的其他地方使用<%’code…%>,解釋器就認(rèn)為這是第一行定義的語(yǔ)言
來(lái)自 Nine Javascript Gotchas , 以下是JavaScript容易犯錯(cuò)的九個(gè)陷阱。雖然不是什么很高深的技術(shù)問(wèn)題,但注意一下,會(huì)使您的編程輕松些,即所謂make life easier. 筆者對(duì)某些陷阱會(huì)混雜一些評(píng)點(diǎn)。
1. 最后一個(gè)逗號(hào)
如這段代碼,注意最后一個(gè)逗號(hào),按語(yǔ)言學(xué)角度來(lái)說(shuō)應(yīng)該是不錯(cuò)的(python的類(lèi)似數(shù)據(jù)類(lèi)型辭典dictionary就允許如此)。IE會(huì)報(bào)語(yǔ)法錯(cuò)誤,但語(yǔ)焉不詳,你只能用人眼從幾千行代碼中掃描。
<script>
var theObj = {
city : “Boston”,
state : “MA”,
}
</script>
2. this的引用會(huì)改變
如這段代碼:
<input type=”button” value=”Gotcha!” id=”MyButton” >
<script>
var MyObject = function () {
this.alertMessage = “Javascript rules”;
this.ClickHandler = function() {
alert(this.alertMessage );
}
}();
document.getElementById(”theText”).onclick = MyObject.ClickHandler
</script>
并不如你所愿,答案并不是”JavaScript rules”。在執(zhí)行MyObject.ClickHandler時(shí),代碼中紅色這行,this的引用實(shí)際上指向的是document.getElementById(“theText”)的引用。可以這么解決:
<input type=”button” value=”Gotcha!” id=”theText” >
<script>
var MyObject = function () {
var self = this;
this.alertMessage = “Javascript rules”;
this.OnClick = function() {
alert(self.value);
}
}();
document.getElementById(”theText”).onclick = MyObject.OnClick
</script>
實(shí)質(zhì)上,這就是JavaScript作用域的問(wèn)題。如果你看過(guò),你會(huì)發(fā)現(xiàn)解決方案不止一種。
3. 標(biāo)識(shí)盜賊
在JavaScript中不要使用跟HTML的id一樣的變量名。如下代碼:
<input type=”button” id=”TheButton”>
<script>
TheButton = get(“TheButton”);
</script>
IE會(huì)報(bào)對(duì)象未定義的錯(cuò)誤。我只能說(shuō):IE sucks.
4. 字符串只替換第一個(gè)匹配
如下代碼:
<script>
var fileName = “This is a title”.replace(” “,”_”);
</script>
而實(shí)際上,結(jié)果是”This_is a title“. 在JavaScript中,String.replace的第一個(gè)參數(shù)應(yīng)該是正則表達(dá)式。所以,正確的做法是這樣:
var fileName = “This is a title”.replace(/ /g,”_”);
5. mouseout意味著mousein
事實(shí)上,這是由于事件冒泡導(dǎo)致的。IE中有mouseenter和mouseleave,但不是標(biāo)準(zhǔn)的。作者在此建議大家使用庫(kù)比如YUI來(lái)解決問(wèn)題。
6. parseInt是基于進(jìn)制體系的
這個(gè)是常識(shí),可是很多人給忽略了parseInt還有第二個(gè)參數(shù),用以指明進(jìn)制。比如,parseInt(“09”),如果你認(rèn)為答案是9,那就錯(cuò)了。因?yàn)椋诖耍址?開(kāi)頭,parseInt以八進(jìn)制來(lái)處理它,在八進(jìn)制中,09是非法,返回false,布爾值false轉(zhuǎn)化成數(shù)值就是0. 因此,正確的做法是parseInt(“09”, 10).
7. for…in…會(huì)遍歷所有的東西
有一段這樣的代碼:
var arr = [5,10,15]
var total = 1;
for ( var x in arr) {
total = total * arr[x];
}
運(yùn)行得好好的,不是嗎?但是有一天它不干了,給我返回的值變成了NaN, 暈。我只不過(guò)引入了一個(gè)庫(kù)而已啊。原來(lái)是這個(gè)庫(kù)改寫(xiě)了Array的prototype,這樣,我們的arr平白無(wú)過(guò)多出了一個(gè)屬性(方法),而for…in…會(huì)把它給遍歷出來(lái)。所以這樣做才是比較安全的:
for ( var x = 0; x < arr.length; x++) {
total = total * arr[x];
}
其實(shí),這也是污染基本類(lèi)的prototype會(huì)帶來(lái)危害的一個(gè)例證。
8. 事件處理器的陷阱
這其實(shí)只會(huì)存在使用作為對(duì)象屬性的事件處理器才會(huì)存在的問(wèn)題。比如window.onclick = MyOnClickMethod這樣的代碼,這會(huì)復(fù)寫(xiě)掉之前的window.onclick事件,還可能導(dǎo)致IE的內(nèi)容泄露(sucks again)。在IE還沒(méi)有支持DOM 2的事件注冊(cè)之前,作者建議使用庫(kù)來(lái)解決問(wèn)題,比如使用YUI:
YAHOO.util.Event.addListener(window, “click”, MyOnClickMethod);
這應(yīng)該也屬于常識(shí)問(wèn)題,但新手可能容易犯錯(cuò)。
9. Focus Pocus
新建一個(gè)input文本元素,然后把焦點(diǎn)挪到它上面,按理說(shuō),這樣的代碼應(yīng)該很自然:
var newInput = document.createElement(“input”);
document.body.appendChild(newInput);
newInput.focus();
newInput.select();
但是IE會(huì)報(bào)錯(cuò)(sucks again and again)。理由可能是當(dāng)你執(zhí)行fouce()的時(shí)候,元素尚未可用。因此,我們可以延遲執(zhí)行:
var newInput = document.createElement(“input”);
newInput.id = “TheNewInput”;
document.body.appendChild(newInput);
setTimeout(function(){ //這里我使用閉包改寫(xiě)過(guò),若有興趣可以對(duì)比原文
document.getElementById(‘TheNewInput’).focus();
document.getElementById(‘TheNewInput’).select();}, 10);
在實(shí)踐中,JavaScript的陷阱還有很多很多,大多是由于解析器的實(shí)現(xiàn)不到位而引起。這些東西一般都不會(huì)在教科書(shū)中出現(xiàn),只能靠開(kāi)發(fā)者之間的經(jīng)驗(yàn)分享。謝天謝地,我們生活在網(wǎng)絡(luò)時(shí)代,很多碰到的問(wèn)題,一般都可以在Google中找到答案。
]]>| 事件 | 瀏覽器支持 | 描述 |
| onClick | IE3|N2|O3 | 鼠標(biāo)點(diǎn)擊事件,多用在某個(gè)對(duì)象控制的范圍內(nèi)的鼠標(biāo)點(diǎn)擊 |
| onDblClick | IE4|N4|O | 鼠標(biāo)雙擊事件 |
| onMouseDown | IE4|N4|O | 鼠標(biāo)上的按鈕被按下了 |
| onMouseUp | IE4|N4|O | 鼠標(biāo)按下后,松開(kāi)時(shí)激發(fā)的事件 |
| onMouseOver | IE3|N2|O3 | 當(dāng)鼠標(biāo)移動(dòng)到某對(duì)象范圍的上方時(shí)觸發(fā)的事件 |
| onMouseMove | IE4|N4|O | 鼠標(biāo)移動(dòng)時(shí)觸發(fā)的事件 |
| onMouseOut | IE4|N3|O3 | 當(dāng)鼠標(biāo)離開(kāi)某對(duì)象范圍時(shí)觸發(fā)的事件 |
| onKeyPress | IE4|N4|O | 當(dāng)鍵盤(pán)上的某個(gè)鍵被按下并且釋放時(shí)觸發(fā)的事件.[注意:頁(yè)面內(nèi)必須有被聚焦的對(duì)象] |
| onKeyDown | IE4|N4|O | 當(dāng)鍵盤(pán)上某個(gè)按鍵被按下時(shí)觸發(fā)的事件[注意:頁(yè)面內(nèi)必須有被聚焦的對(duì)象] |
| onKeyUp | IE4|N4|O | 當(dāng)鍵盤(pán)上某個(gè)按鍵被按放開(kāi)時(shí)觸發(fā)的事件[注意:頁(yè)面內(nèi)必須有被聚焦的對(duì)象] |
| 事件 | 瀏覽器支持 | 描述 |
| onAbort | IE4|N3|O | 圖片在下載時(shí)被用戶(hù)中斷 |
| onBeforeUnload | IE4|N|O | 當(dāng)前頁(yè)面的內(nèi)容將要被改變時(shí)觸發(fā)的事件 |
| onError | IE4|N3|O | 捕抓當(dāng)前頁(yè)面因?yàn)槟撤N原因而出現(xiàn)的錯(cuò)誤,如腳本錯(cuò)誤與外部數(shù)據(jù)引用的錯(cuò)誤 |
| onLoad | IE3|N2|O3 | 頁(yè)面內(nèi)空完成傳送到瀏覽器時(shí)觸發(fā)的事件,包括外部文件引入完成 |
| onMove | IE|N4|O | 瀏覽器的窗口被移動(dòng)時(shí)觸發(fā)的事件 |
| onResize | IE4|N4|O | 當(dāng)瀏覽器的窗口大小被改變時(shí)觸發(fā)的事件 |
| onScroll | IE4|N|O | 瀏覽器的滾動(dòng)條位置發(fā)生變化時(shí)觸發(fā)的事件 |
| onStop | IE5|N|O | 瀏覽器的停止按鈕被按下時(shí)觸發(fā)的事件或者正在下載的文件被中斷 |
| onUnload | IE3|N2|O3 | 當(dāng)前頁(yè)面將被改變時(shí)觸發(fā)的事件 |
| 事件 | 瀏覽器支持 | 描述 |
| onBlur | IE3|N2|O3 | 當(dāng)前元素失去焦點(diǎn)時(shí)觸發(fā)的事件 [鼠標(biāo)與鍵盤(pán)的觸發(fā)均可] |
| onChange | IE3|N2|O3 | 當(dāng)前元素失去焦點(diǎn)并且元素的內(nèi)容發(fā)生改變而觸發(fā)的事件 [鼠標(biāo)與鍵盤(pán)的觸發(fā)均可] |
| onFocus | IE3|N2|O3 | 當(dāng)某個(gè)元素獲得焦點(diǎn)時(shí)觸發(fā)的事件 |
| onReset | IE4|N3|O3 | 當(dāng)表單中RESET的屬性被激發(fā)時(shí)觸發(fā)的事件 |
| onSubmit | IE3|N2|O3 | 一個(gè)表單被遞交時(shí)觸發(fā)的事件 |
| 事件 | 瀏覽器支持 | 描述 |
| onBounce | IE4|N|O | 在Marquee內(nèi)的內(nèi)容移動(dòng)至Marquee顯示范圍之外時(shí)觸發(fā)的事件 |
| onFinish | IE4|N|O | 當(dāng)Marquee元素完成需要顯示的內(nèi)容后觸發(fā)的事件 |
| onStart | IE4|N|O | 當(dāng)Marquee元素開(kāi)始顯示內(nèi)容時(shí)觸發(fā)的事件 |
| 事件 | 瀏覽器支持 | 描述 |
| onBeforeCopy | IE5|N|O | 當(dāng)頁(yè)面當(dāng)前的被選擇內(nèi)容將要復(fù)制到瀏覽者系統(tǒng)的剪貼板前觸發(fā)的事件 |
| onBeforeCut | IE5|N|O | 當(dāng)頁(yè)面中的一部分或者全部的內(nèi)容將被移離當(dāng)前頁(yè)面[剪貼]并移動(dòng)到瀏覽者的系統(tǒng)剪貼板時(shí)觸發(fā)的事件 |
| onBeforeEditFocus | IE5|N|O | 當(dāng)前元素將要進(jìn)入編輯狀態(tài) |
| onBeforePaste | IE5|N|O | 內(nèi)容將要從瀏覽者的系統(tǒng)剪貼板傳送[粘貼]到頁(yè)面中時(shí)觸發(fā)的事件 |
| onBeforeUpdate | IE5|N|O | 當(dāng)瀏覽者粘貼系統(tǒng)剪貼板中的內(nèi)容時(shí)通知目標(biāo)對(duì)象 |
| onContextMenu | IE5|N|O | 當(dāng)瀏覽者按下鼠標(biāo)右鍵出現(xiàn)菜單時(shí)或者通過(guò)鍵盤(pán)的按鍵觸發(fā)頁(yè)面菜單時(shí)觸發(fā)的事件 [試試在頁(yè)面中的<body>中加入onContentMenu=”return false”就可禁止使用鼠標(biāo)右鍵了] |
| onCopy | IE5|N|O | 當(dāng)頁(yè)面當(dāng)前的被選擇內(nèi)容被復(fù)制后觸發(fā)的事件 |
| onCut | IE5|N|O | 當(dāng)頁(yè)面當(dāng)前的被選擇內(nèi)容被剪切時(shí)觸發(fā)的事件 |
| onDrag | IE5|N|O | 當(dāng)某個(gè)對(duì)象被拖動(dòng)時(shí)觸發(fā)的事件 [活動(dòng)事件] |
| onDragDrop | IE|N4|O | 一個(gè)外部對(duì)象被鼠標(biāo)拖進(jìn)當(dāng)前窗口或者幀 |
| onDragEnd | IE5|N|O | 當(dāng)鼠標(biāo)拖動(dòng)結(jié)束時(shí)觸發(fā)的事件,即鼠標(biāo)的按鈕被釋放了 |
| onDragEnter | IE5|N|O | 當(dāng)對(duì)象被鼠標(biāo)拖動(dòng)的對(duì)象進(jìn)入其容器范圍內(nèi)時(shí)觸發(fā)的事件 |
| onDragLeave | IE5|N|O | 當(dāng)對(duì)象被鼠標(biāo)拖動(dòng)的對(duì)象離開(kāi)其容器范圍內(nèi)時(shí)觸發(fā)的事件 |
| onDragOver | IE5|N|O | 當(dāng)某被拖動(dòng)的對(duì)象在另一對(duì)象容器范圍內(nèi)拖動(dòng)時(shí)觸發(fā)的事件 |
| onDragStart | IE4|N|O | 當(dāng)某對(duì)象將被拖動(dòng)時(shí)觸發(fā)的事件 |
| onDrop | IE5|N|O | 在一個(gè)拖動(dòng)過(guò)程中,釋放鼠標(biāo)鍵時(shí)觸發(fā)的事件 |
| onLoseCapture | IE5|N|O | 當(dāng)元素失去鼠標(biāo)移動(dòng)所形成的選擇焦點(diǎn)時(shí)觸發(fā)的事件 |
| onPaste | IE5|N|O | 當(dāng)內(nèi)容被粘貼時(shí)觸發(fā)的事件 |
| onSelect | IE4|N|O | 當(dāng)文本內(nèi)容被選擇時(shí)的事件 |
| onSelectStart | IE4|N|O | 當(dāng)文本內(nèi)容選擇將開(kāi)始發(fā)生時(shí)觸發(fā)的事件 |
| 事件 | 瀏覽器支持 | 描述 |
| onAfterUpdate | IE4|N|O | 當(dāng)數(shù)據(jù)完成由數(shù)據(jù)源到對(duì)象的傳送時(shí)觸發(fā)的事件 |
| onCellChange | IE5|N|O | 當(dāng)數(shù)據(jù)來(lái)源發(fā)生變化時(shí) |
| onDataAvailable | IE4|N|O | 當(dāng)數(shù)據(jù)接收完成時(shí)觸發(fā)事件 |
| onDatasetChanged | IE4|N|O | 數(shù)據(jù)在數(shù)據(jù)源發(fā)生變化時(shí)觸發(fā)的事件 |
| onDatasetComplete | IE4|N|O | 當(dāng)來(lái)子數(shù)據(jù)源的全部有效數(shù)據(jù)讀取完畢時(shí)觸發(fā)的事件 |
| onErrorUpdate | IE4|N|O | 當(dāng)使用onBeforeUpdate事件觸發(fā)取消了數(shù)據(jù)傳送時(shí),代替onAfterUpdate事件 |
| onRowEnter | IE5|N|O | 當(dāng)前數(shù)據(jù)源的數(shù)據(jù)發(fā)生變化并且有新的有效數(shù)據(jù)時(shí)觸發(fā)的事件 |
| onRowExit | IE5|N|O | 當(dāng)前數(shù)據(jù)源的數(shù)據(jù)將要發(fā)生變化時(shí)觸發(fā)的事件 |
| onRowsDelete | IE5|N|O | 當(dāng)前數(shù)據(jù)記錄將被刪除時(shí)觸發(fā)的事件 |
| onRowsInserted | IE5|N|O | 當(dāng)前數(shù)據(jù)源將要插入新數(shù)據(jù)記錄時(shí)觸發(fā)的事件 |
| 事件 | 瀏覽器支持 | 描述 |
| onAfterPrint | IE5|N|O | 當(dāng)文檔被打印后觸發(fā)的事件 |
| onBeforePrint | IE5|N|O | 當(dāng)文檔即將打印時(shí)觸發(fā)的事件 |
| onFilterChange | IE4|N|O | 當(dāng)某個(gè)對(duì)象的濾鏡效果發(fā)生變化時(shí)觸發(fā)的事件 |
| onHelp | IE4|N|O | 當(dāng)瀏覽者按下F1或者瀏覽器的幫助選擇時(shí)觸發(fā)的事件 |
| onPropertyChange | IE5|N|O | 當(dāng)對(duì)象的屬性之一發(fā)生變化時(shí)觸發(fā)的事件 |
| onReadyStateChange | IE4|N|O | 當(dāng)對(duì)象的初始化屬性值發(fā)生變化時(shí)觸發(fā)的事件 |
用法說(shuō)明:
以下說(shuō)明將以一個(gè)半徑為20像素圓角的DIV為例.
實(shí)現(xiàn)div圓角的JavaScript代碼.rar
解壓您下載的文件, 上傳到您的站點(diǎn)。然后復(fù)制代碼如下和黏貼它入您的網(wǎng)頁(yè)的頂頭部分。如果您保存了文件到該網(wǎng)頁(yè)目錄外
的任何地方, 修正代碼中的src值.
===代碼:
< script type="text/javascript" src="rounded_corners.js"></script >
——————————B
然后創(chuàng)造一個(gè)div。如果您已有div使用圓角,只要給這個(gè)div一個(gè)id就可以.
===代碼:
< div id="mydiv"></div >
——————————C
最后我們需要添加一段javascript來(lái)預(yù)載。在您的網(wǎng)頁(yè)的頂頭部分增加以下代碼:
|
以下是引用片段: <script type="text/javascript"> window.onload = function() var PObj = document.getElementById("mydiv"); var cornersObj = new curvyCorners(settings, divObj); </script> |
======== 其中,radius表示半徑,數(shù)值越大,圓角就越大.
————————————D
現(xiàn)在可以運(yùn)行了.呵呵
———————————–PS:
*********如果你想搞成奇形怪狀的圓角,你可以設(shè)置每個(gè)角都不同的半徑.
例如:
|
以下是引用片段: settings = { tl: { radius: 20 }, tr: { radius: 40 }, bl: { radius: 60 }, br: { radius: 80 }, antiAlias: true, autoPad: false } 或者: settings = { tl: { radius: 20 }, tr: false, bl: false, br: { radius: 80 }, antiAlias: true, autoPad: false } |
提示: tl-左上角 tr=右上角 bl=左下角 br=右下角
]]>常用的網(wǎng)頁(yè)特效收集起來(lái)做一個(gè)“大全”。
1.讓文字不停地滾動(dòng)
<MARQUEE>滾動(dòng)文字</MARQUEE>
2.記錄并顯示網(wǎng)頁(yè)的最后修改時(shí)間
<script language=Javascript>
document.write(“最后更新時(shí)間: ” + document.lastModified + “”)
</script>
3.關(guān)閉當(dāng)前窗口
<a href=”/”onClick=”javascript:window.close();return false;”>關(guān)閉窗口</a>
4.5秒后關(guān)閉當(dāng)前頁(yè)
<script language=”Javascript”>
<!–
setTimeout(‘window.close();’,5000);
–>
</script>
5.2秒后載入指定網(wǎng)頁(yè)
<head>
<meta http-equiv=”refresh” content=”2;URL=http://你的網(wǎng)址”>
</head>
6.添加到收藏夾
<script Language=”Javascript”>
function bookmarkit()
{
window.external.addFavorite(‘http://你的網(wǎng)址’,’你的網(wǎng)站名稱(chēng)’)
}
if (document.all)document.write(‘<a href=”#” onClick=”bookmarkit()”>加入收藏夾</a>’)
</script>
7.讓超鏈接不顯示下劃線
<style type=”text/css”>
<!-
a:link{text-decoration:none}
a:hover{text-decoration:none}
a:visited{text-decoration:none}
->
</style>
8.禁止鼠標(biāo)右鍵的動(dòng)作
<script Language = “Javascript”>
function click() { if (event.button==2||event.button==3)
{
alert(‘禁止鼠標(biāo)右鍵’);
}
document.onmousedown=click // –>
</script>
9.設(shè)置該頁(yè)為首頁(yè)
<body bgcolor=”#FFFFFF” text=”#000000″>
<!– 網(wǎng)址:http://你的網(wǎng)址–>
<a class=”chlnk” style=”cursor:hand” HREF
onClick=”this.style.behavior=’url(#default#homepage)’;
this.setHomePage(‘你的網(wǎng)站名稱(chēng));”><font color=”000000″ size=”2″ face=”宋體”>設(shè)為首頁(yè)</font></a>
</body>
10.節(jié)日倒計(jì)時(shí)
<script Language=”Javascript”>
var timedate= new Date(“December 25,2003”);
var times=”圣誕節(jié)”;
var now = new Date();
var date = timedate.getTime() – now.getTime();
var time = Math.floor(date / (1000 * 60 * 60 * 24));
if (time >= 0)
document.write(“現(xiàn)在離”+times+”還有: “+time +”天”)</script>
11.單擊按鈕打印出當(dāng)前頁(yè)
<script Language=”Javascript”>
<!– Begin
if (window.print) {
document.write(‘<form>’
+ ‘<input type=button name=print value=”打印本頁(yè)” ‘
+ ‘onClick=”javascript:window.print()”></form>’);
}
// End –>
</script>
12.單擊按鈕‘另存為’當(dāng)前頁(yè)
<input type=”button” name=”Button” value=”保存本頁(yè)”
onClick=”document.all.button.ExecWB(4,1)”>
<o(jì)bject id=”button”
width=0
height=0
classid=”CLSID:8856F961-340A-11D0-A96B-00C04FD705A2″>
<embed width=”0″ height=”0″></embed>
</object>
13.顯示系統(tǒng)當(dāng)前日期
<script language=Javascript>
today=new Date();
function date(){
this.length=date.arguments.length
for(var i=0;i<this.length;i++)
this[i+1]=date.arguments }
var d=new date(“星期日”,”星期一”,”星期二”,”星期三”,”星期四”,”星期五”,”星期六”);
document.write(
”<font color=##000000 style=’font-size:9pt;font-family: 宋體’> “,
today.getYear(),”年”,today.getMonth()+1,”月”,today.getDate(),”日”,
d[today.getDay()+1],”</font>” );
</script>
14.不同時(shí)間段顯示不同問(wèn)候語(yǔ)
<script Language=”Javascript”>
<!–
var text=””; day = new Date( ); time = day.getHours( );
if (( time>=0) && (time < 7 ))
text=”夜貓子,要注意身體哦! ”
if (( time >= 7 ) && (time < 12))
text=”今天天氣……哈哈哈,不去玩嗎?”
if (( time >= 12) && (time < 14))
text=”午休時(shí)間哦,朋友一定是不習(xí)慣午睡的吧?!”
if (( time >=14) && (time < 18))
text=”下午茶的時(shí)間到了,休息一下吧! ”
if ((time >= 18) && (time <= 22))
text=”您又來(lái)了,可別和MM聊太久哦!”
if ((time >= 22) && (time < 24))
text=”很晚了哦,注意休息呀!”
document.write(text)
//—>
</script>
15.水中倒影效果
<img id=”reflect” src=”你自己的圖片文件名” width=”175″ height=”59″>
<script language=”Javascript”>
function f1()
{
setInterval(“mP.filters.wave.phase+=10”,100);
}
if (document.all)
{
document.write(‘<img id=mP src=”‘+document.all.reflect.src+'”
style=”filter:wave(strength=3,freq=3,phase=0,lightstrength=30) blur() flipv()”>’)
window.onload=f1
}
</script>
16.慢慢變大的窗口
<script Language=”Javascript”>
<!–
var Windowsheight=100
var Windowswidth=100
var numx=5
function openwindow(thelocation){
temploc=thelocation
if
(!(window.resizeTo&&document.all)&&!(window.resizeTo&&document.getElementById))
{
window.open(thelocation)
return
}
windowsize=window.open(“”,””,”scrollbars”)
windowsize.moveTo(0,0)
windowsize.resizeTo(100,100)
tenumxt()
}
function tenumxt(){
if (Windowsheight>=screen.availHeight-3)
numx=0
windowsize.resizeBy(5,numx)
Windowsheight+=5
Windowswidth+=5
if (Windowswidth>=screen.width-5)
{
windowsize.location=temploc
Windowsheight=100
Windowswidth=100
numx=5
return
}
setTimeout(“tenumxt()”,50)
}
//–>
</script>
<p><a href=”javascript:openwindow(http://www.mxio.cn)”>進(jìn)入</a>
17.改變IE地址欄的IE圖標(biāo)
我們要先做一個(gè)16*16的icon(圖標(biāo)文件),保存為index.ico。把這個(gè)圖標(biāo)文件上傳到根目錄下并在首頁(yè)<head></head>之間加上如下代碼:
]]>對(duì)于如今熱衷于網(wǎng)頁(yè)設(shè)計(jì)的愛(ài)好者們來(lái)說(shuō),單調(diào)的網(wǎng)頁(yè)效果已經(jīng)遠(yuǎn)遠(yuǎn)不能滿(mǎn)足他們新奇的心理了。本文就來(lái)介紹一種簡(jiǎn)單的下拉菜單的制作。只要你懂得一點(diǎn)點(diǎn)HTML的知識(shí),就可以。即使什么也不懂,照葫蘆畫(huà)瓢也行,呵呵。
第一步,定義下拉菜單JS代碼
第二步,在適當(dāng)?shù)奈恢貌迦肽夸洸藛?
第三步,插入隱藏層的定義.
到這里,你就可以看到一個(gè)完整的下拉菜單的網(wǎng)頁(yè)特效了。
]]>以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox
1. document.form.item 問(wèn)題
(1)現(xiàn)有問(wèn)題:
現(xiàn)有代碼中存在許多 document.formName.item(“itemName”) 這樣的語(yǔ)句,不能在 MF 下運(yùn)行
(2)解決方法:
改用 document.formName.elements[“elementName”]
(3)其它
參見(jiàn) 2
2. 集合類(lèi)對(duì)象問(wèn)題
(1)現(xiàn)有問(wèn)題:
現(xiàn)有代碼中許多集合類(lèi)對(duì)象取用時(shí)使用 (),IE 能接受,MF 不能。
(2)解決方法:
改用 [] 作為下標(biāo)運(yùn)算。如:document.forms(“formName”) 改為 document.forms[“formName”]。
又如:document.getElementsByName(“inputName”)(1) 改為 document.getElementsByName(“inputName”)[1]
(3)其它
3. window.event
(1)現(xiàn)有問(wèn)題:
使用 window.event 無(wú)法在 MF 上運(yùn)行
(2)解決方法:
MF 的 event 只能在事件發(fā)生的現(xiàn)場(chǎng)使用,此問(wèn)題暫無(wú)法解決。可以這樣變通:
原代碼(可在IE中運(yùn)行):
<input type=”button” name=”someButton” value=”提交” onclick=”javascript:gotoSubmit()”/>
…
<script language=”javascript”>
function gotoSubmit() {
…
alert(window.event); // use window.event
…
}
</script>
新代碼(可在IE和MF中運(yùn)行):
<input type=”button” name=”someButton” value=”提交” onclick=”javascript:gotoSubmit(event)”/>
…
<script language=”javascript”>
function gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);
…
alert(evt); // use evt
…
}
</script>
此外,如果新代碼中第一行不改,與老代碼一樣的話(即 gotoSubmit 調(diào)用沒(méi)有給參數(shù)),則仍然只能在IE中運(yùn)行,但不會(huì)出錯(cuò)。所以,這種方案 tpl 部分仍與老代碼兼容。
4. HTML 對(duì)象的 id 作為對(duì)象名的問(wèn)題
(1)現(xiàn)有問(wèn)題
在 IE 中,HTML 對(duì)象的 ID 可以作為 document 的下屬對(duì)象變量名直接使用。在 MF 中不能。
(2)解決方法
用 getElementById(“idName”) 代替 idName 作為對(duì)象變量使用。
5. 用idName字符串取得對(duì)象的問(wèn)題
(1)現(xiàn)有問(wèn)題
在IE中,利用 eval(idName) 可以取得 id 為 idName 的 HTML 對(duì)象,在MF 中不能。
(2)解決方法
用 getElementById(idName) 代替 eval(idName)。
6. 變量名與某 HTML 對(duì)象 id 相同的問(wèn)題
(1)現(xiàn)有問(wèn)題
在 MF 中,因?yàn)閷?duì)象 id 不作為 HTML 對(duì)象的名稱(chēng),所以可以使用與 HTML 對(duì)象 id 相同的變量名,IE 中不能。
(2)解決方法
在聲明變量時(shí),一律加上 var ,以避免歧義,這樣在 IE 中亦可正常運(yùn)行。
此外,最好不要取與 HTML 對(duì)象 id 相同的變量名,以減少錯(cuò)誤。
(3)其它
參見(jiàn) 問(wèn)題4
7. event.x 與 event.y 問(wèn)題
(1)現(xiàn)有問(wèn)題
在IE 中,event 對(duì)象有 x, y 屬性,MF中沒(méi)有。
(2)解決方法
在MF中,與event.x 等效的是 event.pageX。但event.pageX IE中沒(méi)有。
故采用 event.clientX 代替 event.x。在IE 中也有這個(gè)變量。
event.clientX 與 event.pageX 有微妙的差別(當(dāng)整個(gè)頁(yè)面有滾動(dòng)條的時(shí)候),不過(guò)大多數(shù)時(shí)候是等效的。
如果要完全一樣,可以稍麻煩些:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x
(3)其它
event.layerX 在 IE 與 MF 中都有,具體意義有無(wú)差別尚未試驗(yàn)。
8. 關(guān)于frame
(1)現(xiàn)有問(wèn)題
在 IE中 可以用window.testFrame取得該frame,mf中不行
(2)解決方法
在frame的使用方面mf和ie的最主要的區(qū)別是:
如果在frame標(biāo)簽中書(shū)寫(xiě)了以下屬性:
<frame src=”xx.htm” id=”frameId” name=”frameName” />
那么ie可以通過(guò)id或者name訪問(wèn)這個(gè)frame對(duì)應(yīng)的window對(duì)象
而mf只可以通過(guò)name來(lái)訪問(wèn)這個(gè)frame對(duì)應(yīng)的window對(duì)象
例如如果上述frame標(biāo)簽寫(xiě)在最上層的window里面的htm里面,那么可以這樣訪問(wèn)
ie: window.top.frameId或者window.top.frameName來(lái)訪問(wèn)這個(gè)window對(duì)象
mf: 只能這樣window.top.frameName來(lái)訪問(wèn)這個(gè)window對(duì)象
另外,在mf和ie中都可以使用window.top.document.getElementById(“frameId”)來(lái)訪問(wèn)frame標(biāo)簽
并且可以通過(guò)window.top.document.getElementById(“testFrame”).src = ‘xx.htm’來(lái)切換frame的內(nèi)容
也都可以通過(guò)window.top.frameName.location = ‘xx.htm’來(lái)切換frame的內(nèi)容
關(guān)于frame和window的描述可以參見(jiàn)bbs的‘window與frame’文章
以及/test/js/test_frame/目錄下面的測(cè)試
—-adun 2004.12.09修改
9. 在mf中,自己定義的屬性必須getAttribute()取得
10.在mf中沒(méi)有 parentElement parement.children 而用
parentNode parentNode.childNodes
childNodes的下標(biāo)的含義在IE和MF中不同,MF使用DOM規(guī)范,childNodes中會(huì)插入空白文本節(jié)點(diǎn)。
一般可以通過(guò)node.getElementsByTagName()來(lái)回避這個(gè)問(wèn)題。
當(dāng)html中節(jié)點(diǎn)缺失時(shí),IE和MF對(duì)parentNode的解釋不同,例如
<form>
<table>
<input/>
</table>
</form>
MF中input.parentNode的值為form, 而IE中input.parentNode的值為空節(jié)點(diǎn)
MF中節(jié)點(diǎn)沒(méi)有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node)
11.const 問(wèn)題
(1)現(xiàn)有問(wèn)題:
在 IE 中不能使用 const 關(guān)鍵字。如 const constVar = 32; 在IE中這是語(yǔ)法錯(cuò)誤。
(2)解決方法:
不使用 const ,以 var 代替。
12. body 對(duì)象
MF的body在body標(biāo)簽沒(méi)有被瀏覽器完全讀入之前就存在,而IE則必須在body完全被讀入之后才存在
13. url encoding
在js中如果書(shū)寫(xiě)url就直接寫(xiě)&不要寫(xiě)&例如var url = ‘xx.jsp?objectName=xx&objectEvent=xxx’;
frm.action = url那么很有可能url不會(huì)被正常顯示以至于參數(shù)沒(méi)有正確的傳到服務(wù)器
一般會(huì)服務(wù)器報(bào)錯(cuò)參數(shù)沒(méi)有找到
當(dāng)然如果是在tpl中例外,因?yàn)閠pl中符合x(chóng)ml規(guī)范,要求&書(shū)寫(xiě)為&
一般MF無(wú)法識(shí)別js中的&
14. nodeName 和 tagName 問(wèn)題
(1)現(xiàn)有問(wèn)題:
在MF中,所有節(jié)點(diǎn)均有 nodeName 值,但 textNode 沒(méi)有 tagName 值。在 IE 中,nodeName 的使用好象
有問(wèn)題(具體情況沒(méi)有測(cè)試,但我的IE已經(jīng)死了好幾次)。
(2)解決方法:
使用 tagName,但應(yīng)檢測(cè)其是否為空。
15. 元素屬性
IE下 input.type屬性為只讀,但是MF下可以修改
16. document.getElementsByName() 和 document.all[name] 的問(wèn)題
(1)現(xiàn)有問(wèn)題:
在 IE 中,getElementsByName()、document.all[name] 均不能用來(lái)取得 P 元素(是否還有其它不能取的元素還不知道)。
]]>