調用qq的方法:
<A href="tencent://message/?uin=20989163&Site=博客園&Menu=yes"
target=blank><IMG alt=點擊這里給我發消息 src="http://wpa.qq.com/pa?p=1:20989163:11"
border=0></A>
調用msn的方法:
<A href="msnim:chat?contact=xxqq0824@hotmail.com" target=blank>點這里和我MSN聊天</A>
放在頁面上就能出效果了!
1.如何在網頁上顯示騰訊QQ在線洽談?
QQ在線咨詢代碼(qq在線交談代碼/qq在線客服代碼/qq在線狀態代碼/qq在線客服代碼)
(將123456換成你的號碼,site后面換成你的網站就可以了)
更多的生成顯示QQ在線狀態的代碼,請查看騰訊官方網站
http://imis.qq.com/webpresence/code.shtml
你只需要填寫你的號碼,網站名稱以及提示就可以點擊生成就可以生成QQ在線狀態的代碼,拷貝生成的代碼加入網頁即可
2.阿里巴巴貿易通在線狀態代碼生成,eric改成你的ID就行了,還有ALT改成你的內容
更多的阿里巴巴貿易通在線狀態代碼生成樣式,請查看阿里巴巴官方網站
http://club.china.alibaba.com/club/block/alitalk/alitalkfire.html
3.skype在線狀態代碼生成
將eric換成你的skype ID就可以了,需要在skype個人賬戶里設置對任何人顯示狀態
更多的skype在線狀態代碼生成樣式,請查看skype的官方網站
http://www.skype.com/share/buttons/
4.如何生成MSN在線狀態代碼
可以設置自定義顯示圖片,不過檢測速度有點慢,另外一部分人在msn的配置中,設置了不加好友就不顯示在線。這是為了個人隱私保護,但這樣會顯示狀態未知或者離線。如果你不介意別人看到你,就開啟那個選項就好了。
6:雅虎
將admin@hichf.com換成您自己的:
7.在線客服的代碼
有很多朋友問我在線客服的代碼,貌似網上也找不到好用的,因此打算把自己珍藏的代碼拿出來給大家分性享一下,很好用。
按鈕部分,我是用圖片來做例子
JS部分:
ENGLISH
以上代碼已經不支持msn8.0,MSN 8.0的代碼
收藏自:CHF精品論壇
1、 傳遞參數時需要使用encodeURIComponent,這樣組合的url才不會被#等特殊字符截斷。
例如:<script language="javascript">document.write('<a );</script>
2、 進行url跳轉時可以整體使用encodeURI
例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");
3、 js使用數據時可以使用escape
[Huoho.Com編輯]例如:搜藏中history紀錄。
4、 escape對0-255以外的unicode值進行編碼時輸出%u****格式,其它情況下escape,encodeURI,encodeURIComponent編碼結果相同。
最多使用的應為encodeURIComponent,它是將中文、韓文等特殊字符轉換成utf-8格式的url編碼,所以如果給后臺傳遞參數需要使用encodeURIComponent時需要后臺解碼對utf-8支持(form中的編碼方式和當前頁面編碼方式相同)
escape不編碼字符有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不編碼字符有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不編碼字符有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
d.onmousemove=function(a){
if(!a)a=window.event;
if(!a.pageX)a.pageX=a.clientX;
if(!a.pageY)a.pageY=a.clientY;
var tx=a.pageX-x,ty=a.pageY-y;
box.style.left=tx;
box.style.top=ty;
};
d.onmouseup=function(){
if(header.releaseCapture)
header.releaseCapture();
else if(window.captureEvents)
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
d.onmousemove=null;
d.onmouseup=null;
};
};
}
window.onload=function(){
drag(document.getElementById('box_header'),document.getElementById('box'));
Nifty("#box_header","top");
Nifty("#content","bottom");
Nifty("#box");
};
//-->
</script>
</head>
<body>
<div id="box" >
<div id='box_header'>
<li style="margin:5px 0px 5px 0px;list-style-type:none">
咸菜
</li>
</div>
<div id="content">
<li>孤獨中等待,</li>
<li>等待中無耐。</li>
<li>無耐中戀愛,</li>
<li>戀愛中變態。</li>
</div>
</div>
</body>
</html>
這是我學習javascript中面向對象特性的一點總結。希望對具有其他語言的面向對象設計經驗的朋友理解javascript的OO有所幫助。我具有c++,java和python的面向對象設計的經驗。
總的感受, javascript作為一種弱類型的動態語言,語法接近于java,但其面向對象的方式更和python相識。
1 面向對象的特性
類,成員變量,成員函數,類變量,類方法,繼承,多態
1) 類
類的定義:function Circle(r) { this.r = r; }
類的實例化: c = Circle(3);
2)成員變量
成員變量在初始化函數里申明:this.r = r;
注意,在對象生成后,你也可以給它附上成員變量,比如c.name="my circle",
但是除非特別的需要,我強烈建議你不要這樣做。也就是所有的成員都應在初始化函數里聲明。我認為這是一種好的style。
這一點和python很相識。
3)成員函數
成員函數的標準形式是這樣的:
Cricle.prototype.area = function() { return 3.14 * this.r * this.r; }
這和java或python或c++都大不一樣。但為了幫助理解,你可以把prototype看作基類。
prototype里面的變量或方法,是所有對象共享的。
比如,c.area()調用最終就會讓解釋器調用到Circle.prototype.area().
相比于java和c++,javascript具有他們都沒有的一個語義,也就是你可以在prototype里定義變量。定義在prototype里的變量可以被所有的實例共享量。所以一般它應該是一個常數,比如:Circle.prototype.PI = 3.14.
顯然,prototype里的變量和方法都應該是不變的。每一個對象實例都不應該取修改prototype中的內容。雖然語言允許你可以這樣做,但這樣做沒有任何意義,也違反了面向對象的語義(想想,java會讓你動態修改一個類的方法嗎)。
當然,對于多態是另外一回事,在后面詳述。
而且,我建議所有的成員函數都在緊接類定義的地方定義。而不應該在代碼運行的某個地方對一個對象實例增加/修改成員函數。這樣的結果是javascript的類定義盡量向java看齊。使得代碼更清晰。
4)類變量
類變量是屬于一個類的變量。就像java里用static修飾的變量。因為它屬于類,所以它也應該是一個常量。實例不應該去修改它,雖然你可以 (java里可以用final修飾,使得類變量一旦定義,就不能修改)。這里可以看到,類變量和prototype里定義的變量的功能是相似的。確實如 此,他們的目的都是一樣的。但他們的訪問方式
不一樣。比如:
Circle.prototype.PI = 3.14;
Circle.PI = 3.14;
//用prototype里的變量
Circle.prototype.area1 = function() { return this.PI * this.r * this.r; }
//用類變量
Circle.prototype.area2 = function() { return Circle.PI * this.r * this.r; }
5)類方法
這個概念應該很簡單。注意類方法里絕對不要用this關鍵字,和java完全一樣。
Circle.max = function(a, b) {
return a.r > b.r ? a : b;
}
theMax = Circle(new Circle(1), new Circle(4));
6)繼承
子類繼承父類,那么 “子類實例” 具有和 “父類實例” 完全一樣的行為。javascript是這樣實現的。
function SubCircle(x, y, r) {
this.x = x;
this.y = y;
this.r =r;
}
SubCircle.prototype = new Circle(0);
記得前面說的嗎?可以把prototype看作一個基類。這里,prototype確確實實是一個基類。它是如何實現的呢?
舉例如下:
sc = SubCirlce(1,1,3);
sc.area();
調用的傳遞:
sc.area()->sc.prototype.area()->Circle(0).area()->Circle.prototype.area().
看來是不是很奇妙呢。
通過這種方式,javascript實現了繼承。
7)多態
多態是子類會定義和父類具有相同signature的方法。假設在SubCircle所在的空間PI=100,而面積公式也變為 PI*R*R*R。
SubCircle.prototype.PI = 100
SubCircle.prototype.area = function() {
return this.PI*this.r*this.r*this.r;
}
Sc.area()
這樣的操作可以認為是:
Sc.PI->sc.prototype.PI->Cricle(0).PI = 100
Sc.area()->sc.prototype.area()->Circle(0).area.
這個時候,調用過程是這樣的
sc.area()->sc.prototype.area(),在這里解釋器發現了area這個方法,于是它就調用此方法。
而Cricle.prototype.area就永遠也不會被調用。PI的調用也是如此。那么子類如何想調用父類的方法應怎么辦呢?好像沒有什么辦 法哦,誰知道可以告訴我。但面向對象的理論告訴我們,繼承主要是提供接口而不是代碼復用,所以還是少有這樣的念頭為好 :)。
下面是一個例子程序。包含上面的所有的概念。
例子
///////////define: Cricle//////////////////
function Circle(r) {
this.r = r;
}
Circle.PI = 3.14;
Circle.prototype.PI = 3.14;
Circle.prototype.area = function() { return Circle.PI*this.r*this.r; }
Circle.prototype.area2 = function() { return this.PI*this.r*this.r; }
//// test
c = new Circle(3);
//alert("area1 :"+c.area());
//alert("area2 :"+c.area2());
Circle.max = function(a, b) { return a.r>b.r ? a.r : b.r; }
//alert("max is "+Circle.max(new Circle(1), new Circle(3)));
c1 = new Circle(1);
c2 = new Circle(1);
c2.PI = 100;//Circle.prototype.PI=100;
//alert("c1.area1 "+c1.area());
//alert("c1.area2 "+c1.area2());
//alert("c2.area1 "+c2.area());
//alert("c2.area2 "+c2.area2());
////////////////////////define: SubCircle //////////////////
function SubCircle(x, y, r) {
this.x = x;
this.y = y;
this.r = r;
}
SubCircle.prototype = new Circle(0);
SubCircle.prototype.PI = 100;
SubCircle.prototype.move2 = function(x, y) { this.x = x; this.y = y;}
SubCircle.prototype.area = function() { return this.PI*this.r*this.r*this.r; }
//// test
sc = new SubCircle(0,0,2);
alert(sc.area());
只能是中文
<input onkeyup="value=value.replace(/[ -~]/g,'')" onkeydown="if(event.keyCode==13)event.keyCode=9">
屏蔽輸入法
<input style="ime-mode:disabled" onkeydown="if(event.keyCode==13)event.keyCode=9">
只能輸入英文和數字
<input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" onkeydown="if(event.keyCode==13)event.keyCode=9">
只能是數字
<input onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">
只能顯示,不能修改
<input readonly value="只能顯示,不能修改">
只能書數字,判斷按鍵的值
<script language=javascript>
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||(event.keyCode==8)))
event.returnValue=false;
}
</script>
<input onkeydown="onlyNum();">
56.JS中的焦點順序:document.getElementByid("表單元素").tabIndex = 1
57.innerHTML的值是表單元素的值:如<p id="para">"how are <em>you</em>"</p>,則innerHTML的值就是:how are <em>you</em>
58.innerTEXT的值和上面的一樣,只不過不會把<em>這種標記顯示出來.
59.contentEditable可設置元素是否可被修改,isContentEditable返回是否可修改的狀態.
60.isDisabled判斷是否為禁止狀態.disabled設置禁止狀態
61.length取得長度,返回整型數值
62.addBehavior()是一種JS調用的外部函數文件其擴展名為.htc
63.window.focus()使當前的窗口在所有窗口之前.
64.blur()指失去焦點.與FOCUS()相反.
65.select()指元素為選中狀態.
66.防止用戶對文本框中輸入文本:onfocus="this.blur()"
67.取出該元素在頁面中出現的數量:document.all.tags("div(或其它HTML標記符)").length
68.JS中分為兩種窗體輸出:模態和非模態.window.showModaldialog(),window.showModeless()
69.狀態欄文字的設置:window.status='文字',默認的狀態欄文字設置:window.defaultStatus = '文字.';
70.添加到收藏夾:external.AddFavorite("http://www.xrss.cn","jaskdlf");
71.JS中遇到腳本錯誤時不做任何操作:window.onerror = doNothing; 指定錯誤句柄的語法為:window.onerror = handleError;
72.JS中指定當前打開窗口的父窗口:window.opener,支持opener.opener...的多重繼續.
73.JS中的self指的是當前的窗口
74.JS中狀態欄顯示內容:window.status="內容"
75.JS中的top指的是框架集中最頂層的框架
76.JS中關閉當前的窗口:window.close();
77.JS中提出是否確認的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");}
78.JS中的窗口重定向:window.navigate("http://www.sina.com.cn");
79.JS中的打印:window.print()
80.JS中的提示輸入框:window.prompt("message","defaultReply");
81.JS中的窗口滾動條:window.scroll(x,y)
82.JS中的窗口滾動到位置:window.scrollby
83.JS中設置時間間隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout
84.JS中的模態顯示在IE4+行,在NN中不行:showModalDialog("URL"[,arguments][,features]);
85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}} window.onbeforeunload=verifyClose;
86.當窗體第一次調用時使用的文件句柄:onload()
87.當窗體關閉時調用的文件句柄:onunload()
88.window.location的屬性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo",指跳轉到相應的錨記),href(全部的信息)
89.window.location.reload()刷新當前頁面.
89-1.parent.location.reload()刷新父親對象(用于框架)
89-2.opener.location.reload()刷新父窗口對象(用于單開窗口)
89-3.top.location.reload()刷新最頂端對象(用于多開窗口)
90.window.history.back()返回上一頁,window.history.forward()返回下一頁,window.history.go(返回第幾頁,也可以使用訪問過的URL)
91.document.write()不換行的輸出,document.writeln()換行輸出
92.document.body.noWrap=true;防止鏈接文字折行.
93.變量名.charAt(第幾位),取該變量的第幾位的字符.
94."abc".charCodeAt(第幾個),返回第幾個字符的ASCii碼值.
95.字符串連接:string.concat(string2),或用+=進行連接
96.變量.indexOf("字符",起始位置),返回第一個出現的位置(從0開始計算)
97.string.lastIndexOf(searchString[,startIndex])最后一次出現的位置.
98.string.match(regExpression),判斷字符是否匹配.
99.string.replace(regExpression,replaceString)替換現有字符串.
100.string.split(分隔符)返回一個數組存儲值.
101.string.substr(start[,length])取從第幾位到指定長度的字符串.
102.string.toLowerCase()使字符串全部變為小寫.
103.string.toUpperCase()使全部字符變為大寫.
104.parseInt(string[,radix(代表進制)])強制轉換成整型.
105.parseFloat(string[,radix])強制轉換成浮點型.
106.isNaN(變量):測試是否為數值型.
107.定義常量的關鍵字:const,定義變量的關鍵字:var
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>本地計算機時間</title>
</head>
<body>
<SCRIPT language=JavaScript>
<!--
/*****************************************************************************
日期資料
*****************************************************************************/
var lunarInfo=new Array(
0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)
var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
var Animals=new Array("鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬");
var solarTerm = new Array("小寒","大寒","立春","雨水","驚蟄","春分","清明","谷雨","立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至")
var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758)
var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十')
var nStr2 = new Array('初','十','廿','卅',' ')
var monthName = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
//國歷節日 *表示放假日
var sFtv = new Array(
"0101*元旦",
"0214 情人節",
"0303 我生日",
"0308 婦女節",
"0312 植樹節",
"0315 消費者權益日",
"0317 St. Patrick's",
"0401 愚人節",
"0501 勞動節",
"0504 青年節",
"0512 護士節",
"0512 茵生日",
"0601 兒童節",
"0614 Flag Day",
"0701 建黨節 香港回歸紀念",
"0703 炎黃在線誕辰",
"0718 托普誕辰",
"0801 建軍節",
"0808 父親節",
"0909 毛澤東逝世紀念",
"0910 教師節",
"0928 孔子誕辰",
"1001*國慶節",
"1006 老人節",
"1024 聯合國日",
"1111 Veteran's / Remembrance Day",
"1112 孫中山誕辰紀念",
"1220 澳門回歸紀念",
"1225 Christmas Day",
"1226 毛澤東誕辰紀念")
//農歷節日 *表示放假日
var lFtv = new Array(
"0101*春節",
"0115 元宵節",
"0505 端午節",
"0707 七夕情人節",
"0715 中元節",
"0815 中秋節",
"0909 重陽節",
"1208 臘八節",
"1224 小年",
"0100*除夕")
//某月的第幾個星期幾
var wFtv = new Array(
"0131 Martin Luther King Day",
"0231 President's Day",
"0520 母親節",
"0530 Armed Forces Day",
"0531 Victoria Day",
"0716 合作節",
"0730 被奴役國家周",
"0811 Civic Holiday",
"0911 Labor Holiday",
"1021 Columbus Day",
"1144 Thanksgiving")
/*****************************************************************************
日期計算
*****************************************************************************/
//====================================== 傳回農歷 y年的總天數
function lYearDays(y) {
var i, sum = 348
for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-1900] & i)? 1: 0
return(sum+leapDays(y))
}
//====================================== 傳回農歷 y年閏月的天數
function leapDays(y) {
if(leapMonth(y)) return((lunarInfo[y-1900] & 0x10000)? 30: 29)
else return(0)
}
//====================================== 傳回農歷 y年閏哪個月 1-12 , 沒閏傳回 0
function leapMonth(y) {
return(lunarInfo[y-1900] & 0xf)
}
//====================================== 傳回農歷 y年m月的總天數
function monthDays(y,m) {
return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 )
}
//====================================== 算出農歷, 傳入日期物件, 傳回農歷日期物件
// 該物件屬性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl
function Lunar(objDate) {
var i, leap=0, temp=0
var baseDate = new Date(1900,0,31)
var offset = (objDate - baseDate)/86400000
this.dayCyl = offset + 40
this.monCyl = 14
for(i=1900; i<2050 && offset>0; i++) {
temp = lYearDays(i)
offset -= temp
this.monCyl += 12
}
if(offset<0) {
offset += temp;
i--;
this.monCyl -= 12
}
this.year = i
this.yearCyl = i-1864
leap = leapMonth(i) //閏哪個月
this.isLeap = false
for(i=1; i<13 && offset>0; i++) {
//閏月
if(leap>0 && i==(leap+1) && this.isLeap==false)
{ --i; this.isLeap = true; temp = leapDays(this.year); }
else
{ temp = monthDays(this.year, i); }
//解除閏月
if(this.isLeap==true && i==(leap+1)) this.isLeap = false
offset -= temp
if(this.isLeap == false) this.monCyl ++
}
if(offset==0 && leap>0 && i==leap+1)
if(this.isLeap)
{ this.isLeap = false; }
else
{ this.isLeap = true; --i; --this.monCyl;}
if(offset<0){ offset += temp; --i; --this.monCyl; }
this.month = i
this.day = offset + 1
}
//==============================傳回國歷 y年某m+1月的天數
function solarDays(y,m) {
if(m==1)
return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28)
else
return(solarMonth[m])
}
//============================== 傳入 offset 傳回干支, 0=甲子
function cyclical(num) {
return(Gan[num%10]+Zhi[num%12])
}
//============================== 月歷屬性
function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) {
this.isToday = false;
//國歷
this.sYear = sYear;
this.sMonth = sMonth;
this.sDay = sDay;
this.week = week;
//農歷
this.lYear = lYear;
this.lMonth = lMonth;
this.lDay = lDay;
this.isLeap = isLeap;
//干支
this.cYear = cYear;
this.cMonth = cMonth;
this.cDay = cDay;
this.color = '';
this.lunarFestival = ''; //農歷節日
this.solarFestival = ''; //國歷節日
this.solarTerms = ''; //節氣
}
//===== 某年的第n個節氣為幾日(從0小寒起算)
function sTerm(y,n) {
var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) )
return(offDate.getUTCDate())
}
//============================== 傳回月歷物件 (y年,m+1月)
function calendar(y,m) {
var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2
var lDPOS = new Array(3)
var n = 0
var firstLM = 0
sDObj = new Date(y,m,1) //當月一日日期
this.length = solarDays(y,m) //國歷當月天數
this.firstWeek = sDObj.getDay() //國歷當月1日星期幾
for(var i=0;i<this.length;i++) {
if(lD>lX) {
sDObj = new Date(y,m,i+1) //當月一日日期
lDObj = new Lunar(sDObj) //農歷
lY = lDObj.year //農歷年
lM = lDObj.month //農歷月
lD = lDObj.day //農歷日
lL = lDObj.isLeap //農歷是否閏月
lX = lL? leapDays(lY): monthDays(lY,lM) //農歷當月最後一天
if(n==0) firstLM = lM
lDPOS[n++] = i-lD+1
}
//sYear,sMonth,sDay,week,
//lYear,lMonth,lDay,isLeap,
//cYear,cMonth,cDay
this[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7],
lY, lM, lD++, lL,
cyclical(lDObj.yearCyl) ,cyclical(lDObj.monCyl), cyclical(lDObj.dayCyl++) )
if((i+this.firstWeek)%7==0) this[i].color = 'red' //周日顏色
if((i+this.firstWeek)%14==13) this[i].color = 'red' //周休二日顏色
}
//節氣
tmp1=sTerm(y,m*2 )-1
tmp2=sTerm(y,m*2+1)-1
this[tmp1].solarTerms = solarTerm[m*2]
this[tmp2].solarTerms = solarTerm[m*2+1]
if(m==3) this[tmp1].color = 'red' //清明顏色
//國歷節日
for(i in sFtv)
if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + ' '
if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = 'red'
}
//月周節日
for(i in wFtv)
if(wFtv[i].match(/^(\d{2})(\d)(\d)([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
tmp1=Number(RegExp.$2)
tmp2=Number(RegExp.$3)
this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + ' '
}
//農歷節日
for(i in lFtv)
if(lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) {
tmp1=Number(RegExp.$1)-firstLM
if(tmp1==-11) tmp1=1
if(tmp1 >=0 && tmp1<n) {
tmp2 = lDPOS[tmp1] + Number(RegExp.$2) -1
if( tmp2 >= 0 && tmp2<this.length) {
this[tmp2].lunarFestival += RegExp.$4 + ' '
if(RegExp.$3=='*') this[tmp2].color = 'red'
}
}
}
//黑色星期五
if((this.firstWeek+12)%7==5)
this[12].solarFestival += '黑色星期五 '
//今日
if(y==tY && m==tM) this[tD-1].isToday = true;
}
//====================== 中文日期
function cDay(d){
var s;
switch (d) {
case 10:
s = '初十'; break;
case 20:
s = '二十'; break;
break;
case 30:
s = '三十'; break;
break;
default :
s = nStr2[Math.floor(d/10)];
s += nStr1[d%10];
}
return(s);
}
///////////////////////////////////////////////////////////////////////////////
var cld;
function drawCld(SY,SM) {
var i,sD,s,size;
cld = new calendar(SY,SM);
if(SY>1874 && SY<1909) yDisplay = '光緒' + (((SY-1874)==1)?'元':SY-1874)
if(SY>1908 && SY<1912) yDisplay = '宣統' + (((SY-1908)==1)?'元':SY-1908)
if(SY>1911 && SY<1950) yDisplay = '民國' + (((SY-1911)==1)?'元':SY-1911)
// if(SY>1949) yDisplay = '共和國' + (((SY-1949)==1)?'元':SY-1949)
// GZ.innerHTML = yDisplay +'年 農歷' + cyclical(SY-1900+36) + '年 【'+Animals[(SY-4)%12]+'】';
if(SY>1949) yDisplay = ''
GZ.innerHTML = yDisplay +' 農歷' + cyclical(SY-1900+36) + '年 【'+Animals[(SY-4)%12]+'】';
YMBG.innerHTML = " " + SY + "<BR> " + monthName[SM];
for(i=0;i<42;i++) {
sObj=eval('SD'+ i);
lObj=eval('LD'+ i);
sObj.className = '';
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length) { //日期內
sObj.innerHTML = sD+1;
if(cld[sD].isToday) sObj.className = 'todyaColor'; //今日顏色
sObj.style.color = cld[sD].color; //國定假日顏色
if(cld[sD].lDay==1) //顯示農歷月
lObj.innerHTML = '<b>'+(cld[sD].isLeap?'閏':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>';
else //顯示農歷日
lObj.innerHTML = cDay(cld[sD].lDay);
s=cld[sD].lunarFestival;
if(s.length>0) { //農歷節日
if(s.length>6) s = s.substr(0, 4)+'…';
s = s.fontcolor('red');
}
else { //國歷節日
s=cld[sD].solarFestival;
if(s.length>0) {
size = (s.charCodeAt(0)>0 && s.charCodeAt(0)<128)?8:4;
if(s.length>size+2) s = s.substr(0, size)+'…';
s = s.fontcolor('blue');
}
else { //廿四節氣
s=cld[sD].solarTerms;
if(s.length>0) s = s.fontcolor('limegreen');
}
}
if(s.length>0) lObj.innerHTML = s;
}
else { //非日期
sObj.innerHTML = '';
lObj.innerHTML = '';
}
}
}
function changeLong()
{
var y,m,ly,lm,id,im,iy,yangy,yangm,deltm,miny,tt;
CLD.SY.selectedIndex=CLD.D1.selectedIndex;
CLD.SM.selectedIndex=CLD.D2.selectedIndex;
yangm=0;yangy=0;
tt=true;
while (tt)
{
yangm=0;yangy=0;
changeCld();
for(i=0;i<42;i++)
{
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length)
{ //日期內
if ((cld[sD].lMonth==CLD.D2.selectedIndex+1)&&(cld[sD].lYear==CLD.D1.selectedIndex+1900))
{
yangy=CLD.SY.selectedIndex+1900; yangm=CLD.SM.selectedIndex ;
tt=false;
break;
}
}
}
if (!tt) break;
pushBtm('MD');
changeCld();
// alert(CLD.SY.selectedIndex+" "+CLD.SM.selectedIndex);
for(i=0;i<42;i++)
{
sD = i - cld.firstWeek;
if(sD>-1 && sD<cld.length)
{ //日期內
if ((cld[sD].lMonth==CLD.D2.selectedIndex+1)&&(cld[sD].lYear==CLD.D1.selectedIndex+1900))
{
yangy=CLD.SY.selectedIndex+1900; yangm=CLD.SM.selectedIndex ;
tt=false;
break;
}
}
}
break;
}
// alert(yangy+" "+yangm);
//CLD.SY.selectedIndex=yangy;//-1900;
//pushBtm('YU');
//pushBtm('YD');
CLD.SM.selectedIndex=yangm;
pushBtm('MD');
pushBtm('MU');
}
//changeLong end
function changeCld() {
var y,m;
y=CLD.SY.selectedIndex+1900;
m=CLD.SM.selectedIndex;
drawCld(y,m);
}
function pushBtm(K) {
switch (K){
case 'YU' :
if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--;
break;
case 'YD' :
if(CLD.SY.selectedIndex<149) CLD.SY.selectedIndex++;
break;
case 'MU' :
if(CLD.SM.selectedIndex>0) {
CLD.SM.selectedIndex--;
}
else {
CLD.SM.selectedIndex=11;
if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--;
}
break;
case 'MD' :
if(CLD.SM.selectedIndex<11) {
CLD.SM.selectedIndex++;
}
else {
CLD.SM.selectedIndex=0;
if(CLD.SY.selectedIndex<149) CLD.SY.selectedIndex++;
}
break;
default :
CLD.SY.selectedIndex=tY-1900;
CLD.SM.selectedIndex=tM;
}
changeCld();
}
var Today = new Date();
var tY = Today.getFullYear();
var tM = Today.getMonth();
var tD = Today.getDate();
//////////////////////////////////////////////////////////////////////////////
var width = "130";
var offsetx = 2;
var offsety = 16;
var x = 0;
var y = 0;
var snow = 0;
var sw = 0;
var cnt = 0;
var dStyle;
document.onmousemove = mEvn;
//顯示詳細日期資料
function mOvr(v) {
var s,festival;
var sObj=eval('SD'+ v);
var d=sObj.innerHTML-1;
//sYear,sMonth,sDay,week,
//lYear,lMonth,lDay,isLeap,
//cYear,cMonth,cDay
if(sObj.innerHTML!='') {
sObj.style.cursor = 's-resize';
if(cld[d].solarTerms == '' && cld[d].solarFestival == '' && cld[d].lunarFestival == '')
festival = '';
else
festival = '<TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 BGCOLOR="#CCFFCC"><TR><TD>'+
'<FONT COLOR="#000000" STYLE="font-size:9pt;">'+cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival+'</FONT></TD>'+
'</TR></TABLE>';
s= '<TABLE WIDTH="130" BORDER=0 CELLPADDING="2" CELLSPACING=0 BGCOLOR="#000066"><TR><TD>' +
'<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD ALIGN="right"><FONT COLOR="#ffffff" STYLE="font-size:9pt;">'+
cld[d].sYear+' 年 '+cld[d].sMonth+' 月 '+cld[d].sDay+' 日<br>星期'+cld[d].week+'<br>'+
'<font color="violet">農歷'+(cld[d].isLeap?'閏 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日</font><br>'+
'<font color="yellow">'+cld[d].cYear+'年 '+cld[d].cMonth+'月 '+cld[d].cDay + '日</font>'+
'</FONT></TD></TR></TABLE>'+ festival +'</TD></TR></TABLE>';
document.all["detail"].innerHTML = s;
if (snow == 0) {
dStyle.left = x+offsetx-(width/2);
dStyle.top = y+offsety;
dStyle.visibility = "visible";
snow = 1;
}
}
}
//清除詳細日期資料
function mOut() {
if ( cnt >= 1 ) { sw = 0 }
if ( sw == 0 ) { snow = 0; dStyle.visibility = "hidden";}
else cnt++;
}
//取得位置
function mEvn() {
x=event.x;
y=event.y;
if (document.body.scrollLeft)
{x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;}
if (snow){
dStyle.left = x+offsetx-(width/2)
dStyle.top = y+offsety
}
}
///////////////////////////////////////////////////////////////////////////
function tick() {
var today
today = new Date()
Clock.innerHTML = today.toLocaleString().replace(/(年|月)/g, "/").replace(/日/, "");
// Clock.innerHTML = TimeAdd(today.toGMTString(), CLD.TZ.value)
window.setTimeout("tick()", 1000);
}
function setCookie(name, value) {
var today = new Date()
var expires = new Date()
expires.setTime(today.getTime() + 1000*60*60*24*365)
document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString()
}
function getCookie(Name) {
var search = Name + "="
if(document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if(offset != -1) {
offset += search.length
end = document.cookie.indexOf(";", offset)
if(end == -1) end = document.cookie.length
return unescape(document.cookie.substring(offset, end))
}
else return ""
}
}
/////////////////////////////////////////////////////////
function initial() {
dStyle = detail.style;
CLD.SY.selectedIndex=tY-1900;
CLD.SM.selectedIndex=tM;
drawCld(tY,tM);
// CLD.TZ.selectedIndex=getCookie("TZ");
// changeTZ();
tick();
}
//-->
</SCRIPT>
<STYLE>.todyaColor {
BACKGROUND-COLOR: aqua
}
</STYLE>
<META content="Microsoft FrontPage 6.0" name=GENERATOR></HEAD>
<BODY onload=initial()>
<SCRIPT language=JavaScript><!--
if(navigator.appName == "Netscape" || parseInt(navigator.appVersion) < 4)
document.write("<h1>你的瀏覽器無法執行此程序。</h1>此程序在 IE4 以后的版本才能執行!!")
//--></SCRIPT>
<DIV id=detail style="POSITION: absolute"></DIV>
<FORM name=CLD>
<div align="center">
<TABLE width="672" align="right" height="259" bordercolordark="#CC9900" border="4" background="l11.gif">
<CENTER>
<center>
<TBODY>
</center></center>
<TR>
<TD align=center vAlign=top width="170" height="255">
<div align="center">
<center>
<TABLE BORDER=1 COLSPAN=2 width="221">
<CENTER>
<center><FONT size=2
style="FONT-SIZE: 9pt">
<td width="209">
<p align="center"><font style="font-size:10.8pt" color=RED>本地計算機時間:</FONT></FONT><BR><FONT color=#000080 face=ARIAL
id=Clock size=3 align="center"></FONT>
<P><!--時區 *表示自動調整為日光節約時間-->
</center>
</CENTER>
</TABLE>
</center>
</div>
<div align="center">
<center>
<table border=1 height="1" width="16">
<td height="1" width="255">
<table width="212" height="1"><CENTER>
<center>
<FONT id=tSave
style="COLOR: red; FONT-FAMILY: Wingdings; FONT-SIZE: 18pt"></FONT>
<td height="1" width="152"><font size="2"><FONT style="FONT-SIZE: 9pt">
<font color="#0000FF">公歷</font>年</font><FONT color=#ffffff
style="FONT-SIZE: 9pt"><SELECT name=SY onchange=changeCld()
style="FONT-SIZE: 9pt">
<SCRIPT language=JavaScript><!--
for(i=1900;i<2050;i++) document.write('<option>'+i)
//--></SCRIPT>
</SELECT> </FONT>月<FONT color=#ffffff
style="FONT-SIZE: 9pt"><SELECT name=SM onchange=changeCld()
style="FONT-SIZE: 9pt">
<SCRIPT language=JavaScript><!--
for(i=1;i<13;i++) document.write('<option>'+i)
//--></SCRIPT>
</SELECT></FONT></font>
<P><font size="2"><FONT style="FONT-SIZE: 9pt"><font color="#0000FF">陰歷</font>年</font><FONT color=#ffffff
style="FONT-SIZE: 9pt"><SELECT name=D1 onchange=changeLong()
style="FONT-SIZE: 9pt">
<SCRIPT language=JavaScript><!--
for(i=1900;i<2050;i++) document.write('<option>'+i)
//--></SCRIPT>
</SELECT> </FONT>月<FONT color=#ffffff
style="FONT-SIZE: 9pt"><SELECT name=D2 onchange=changeLong()
style="FONT-SIZE: 9pt">
<SCRIPT language=JavaScript><!--
for(i=1;i<13;i++) document.write('<option>'+i)
//--></SCRIPT>
</SELECT></FONT></font></P>
<div align="center" style="width: 4; height: 1">
</div>
<td width="1" align="center" height="1">
<BUTTON onclick="pushBtm('MU')" style="FONT-SIZE: 9pt">月↑</BUTTON>
<BUTTON onclick="pushBtm('')" style="FONT-SIZE: 9pt">當月</BUTTON>
<BUTTON onclick="pushBtm('MD')" style="FONT-SIZE: 9pt">月↓</BUTTON>
</td>
</center></center>
<tr>
<CENTER>
<TD align=center vAlign=top width=152 height="1">
<BUTTON onclick="pushBtm('YU')" style="FONT-SIZE: 9pt">年↑</BUTTON>
<BUTTON onclick="pushBtm('YD')" style="FONT-SIZE: 9pt">年↓</BUTTON>
</TD>
</center>
<td colspan=2 width="46" height="1">
<p align="left"><INPUT onclick="javascript:window.close();" style="FONT-SIZE: 9pt" type=button value=關閉></p>
</td>
</table>
<CENTER>
<table border="1" width="100%" height="1" bordercolordark="#FFFFCC">
<tr>
<td width="100%" height="1"><font style="font-size:10.8pt" color=#0>
陰歷存在跨月情況,如果查找到的陰歷月跨兩個公歷月,用<font color=blue>[月↑][月↓]</font>翻動可以找到你想要的確切日期。</font></td>
</tr>
</table>
</CENTER>
</table>
</center>
</div>
<TD align=center width="423" height="255">
<DIV style="position: absolute; top: 31; z-index: -1; left: 270; width: 347; height: 108">
<p>
<p>
<p><FONT id=YMBG
style="COLOR: #f0f0f0; FONT-FAMILY: 'Arial Black'; FONT-SIZE: 20pt"> </FONT>
</DIV>
<div align="center">
<center>
<TABLE border=0 height="27" cellspacing="1">
<TBODY>
<TR>
<TD bgColor=#000080 colSpan=7 align="center" height="24"><FONT color=#000080 size=2
style="FONT-SIZE: 9pt">月</FONT> <FONT color=#ffffff face=宋體 id=GZ
size=4></FONT><BR></TD></TR>
<TR align=center bgColor=#e0e0e0>
<TD width=54 height="1" align="center" bgcolor="#99CCFF"><font size="2">日</font></TD>
<TD width=54 height="1" align="center" bgcolor="#99CCFF"><font size="2">一</font></TD>
<TD width=54 height="1" align="center" bgcolor="#99CCFF"><font size="2">二</font></TD>
<TD width=50 height="1" align="center" bgcolor="#99CCFF"><font size="2">三</font></TD>
<TD width=54 height="1" align="center" bgcolor="#99CCFF"><font size="2">四</font></TD>
<TD width=54 height="1" align="center" bgcolor="#99CCFF"><font size="2">五</font></TD>
<TD width=54 height="1" align="center" bgcolor="#99CCFF"><font size="2">六</font></TD></TR>
<SCRIPT language=JavaScript><!--
var gNum
for(i=0;i<6;i++) {
document.write('<tr align=center>')
for(j=0;j<7;j++) {
gNum = i*7+j
document.write('<td id="GD' + gNum +'" onMouseOver="mOvr(' + gNum +')" onMouseOut="mOut()"><font id="SD' + gNum +'" size=2 face="Arial Black"')
if(j == 0) document.write(' color=red')
if(j == 6)
if(i%2==1) document.write(' color=red')
else document.write(' color=green')
document.write(' TITLE=""> </font><br><font id="LD' + gNum + '" size=2 style="font-size:9pt"> </font></td>')
}
document.write('</tr>')
}
//--></SCRIPT>
</TBODY></TABLE>
</center>
</div>
</TD>
</TR></TBODY></TABLE>
</div>
</FORM>
</body>
</html>
Windows關機效果分析
使用Windows系統的用戶在關機的時候,出現的界面只允許用戶選擇關機、注銷或取消動作,而桌面上的程序都不能使用,并且屏幕呈現灰色狀態。
本例將仿照這種高亮顯示的效果在網頁上實現.
在網頁上運用這種關機效果有什么好處呢?首先,由于單擊某一鏈接后,將用戶此時不可用的操作隱藏在后臺,將可用的操作放在屏幕最上層,并高亮顯示,可以避免用戶的誤操作。其次,將信息高亮顯示,也可以提醒用戶應該注意的事項。
網頁中實現關機效果分析
在網頁中實現這種效果的原理很簡單。創建兩個圖層,一個為遮蓋層,覆蓋整個頁面,并且顯示為灰色;另一個圖層作為高亮顯示的部分,在遮蓋層的上方,這可通過設置圖層的z-index屬性來設置。當取消關機效果后,只需將這兩個圖層元素在頁面中刪除即可。
以下代碼實現顯示關機效果。
以下是引用片段:
<html> |
在使用IE瀏覽器時,要先將網頁中的<select>元素隱藏起來。如以下代碼可以用于隱藏頁面所有的<select>元素。
selects = document.getElementsByTagName('select');
以下是引用片段:
for(i = 0; i < selects.length; i++) { |
以下是引用片段:
<html> |
以下是引用片段:
#lightbox { |
以下是引用片段:
snap_preview_added="no">操作系統。 |
//網頁加載調用initialize和getBrowserInfo方法 |
var lightbox = Class.create(); |
服務器端首先獲得查詢中的“id”值,如果該值為null或為空,則設置為默認值。然后判斷該值,并且返回相應的一段字符串信息。處理請求的getInfohtml" class="wordstyle">jsp頁面代碼如下:
以下是引用片段:
<%@ page language="java" import="java.util.*"%> |
/*
用途:校驗ip地址的格式
輸入:strIP:ip地址
返回:如果通過驗證返回true,否則返回false;
*/
function isIP(strIP) {
if (isNull(strIP)) return false;
var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g //匹配IP地址的正則表達式
if(re.test(strIP))
{
if( RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256) return true;
}
return false;
}
/*
用途:檢查輸入字符串是否為空或者全部都是空格
輸入:str
返回:
如果全是空返回true,否則返回false
*/
function isNull( str ){
if ( str == "" ) return true;
var regu = "^[ ]+$";
var re = new RegExp(regu);
return re.test(str);
}
/*
用途:檢查輸入對象的值是否符合整數格式
輸入:str 輸入的字符串
返回:如果通過驗證返回true,否則返回false
*/
function isInteger( str ){
var regu = /^[-]{0,1}[0-9]{1,}$/;
return regu.test(str);
}
/*
用途:檢查輸入手機號碼是否正確
輸入:
s:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function checkMobile( s ){
var regu =/^[1][3][0-9]{9}$/;
var re = new RegExp(regu);
if (re.test(s)) {
return true;
}else{
return false;
}
}
/*
用途:檢查輸入字符串是否符合正整數格式
輸入:
s:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function isNumber( s ){
var regu = "^[0-9]+$";
var re = new RegExp(regu);
if (s.search(re) != -1) {
return true;
} else {
return false;
}
}
/*
用途:檢查輸入字符串是否是帶小數的數字格式,可以是負數
輸入:
s:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function isDecimal( str ){
if(isInteger(str)) return true;
var re = /^[-]{0,1}(\d+)[\.]+(\d+)$/;
if (re.test(str)) {
if(RegExp.$1==0&&RegExp.$2==0) return false;
return true;
} else {
return false;
}
}
/*
用途:檢查輸入對象的值是否符合端口號格式
輸入:str 輸入的字符串
返回:如果通過驗證返回true,否則返回false
*/
function isPort( str ){
return (isNumber(str) && str<65536);
}
/*
用途:檢查輸入對象的值是否符合E-Mail格式
輸入:str 輸入的字符串
返回:如果通過驗證返回true,否則返回false
*/
function isEmail( str ){
var myReg = /^[-_A-Za-z0-9]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/;
if(myReg.test(str)) return true;
return false;
}
/*
用途:檢查輸入字符串是否符合金額格式
格式定義為帶小數的正數,小數點后最多三位
輸入:
s:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function isMoney( s ){
var regu = "^[0-9]+[\.][0-9]{0,3}$";
var re = new RegExp(regu);
if (re.test(s)) {
return true;
} else {
return false;
}
}
/*
用途:檢查輸入字符串是否只由英文字母和數字和下劃線組成
輸入:
s:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function isNumberOr_Letter( s ){ //判斷是否是數字或字母
var regu = "^[0-9a-zA-Z\_]+$";
var re = new RegExp(regu);
if (re.test(s)) {
return true;
}else{
return false;
}
}
/*
用途:檢查輸入字符串是否只由英文字母和數字組成
輸入:
s:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function isNumberOrLetter( s ){ //判斷是否是數字或字母
var regu = "^[0-9a-zA-Z]+$";
var re = new RegExp(regu);
if (re.test(s)) {
return true;
}else{
return false;
}
}
/*
用途:檢查輸入字符串是否只由漢字、字母、數字組成
輸入:
value:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function isChinaOrNumbOrLett( s ){ //判斷是否是漢字、字母、數字組成
var regu = "^[0-9a-zA-Z\u4e00-\u9fa5]+$";
var re = new RegExp(regu);
if (re.test(s)) {
return true;
}else{
return false;
}
}
/*
用途:判斷是否是日期
輸入:date:日期;fmt:日期格式
返回:如果通過驗證返回true,否則返回false
*/
function isDate( date, fmt ) {
if (fmt==null) fmt="yyyyMMdd";
var yIndex = fmt.indexOf("yyyy");
if(yIndex==-1) return false;
var year = date.substring(yIndex,yIndex+4);
var mIndex = fmt.indexOf("MM");
if(mIndex==-1) return false;
var month = date.substring(mIndex,mIndex+2);
var dIndex = fmt.indexOf("dd");
if(dIndex==-1) return false;
var day = date.substring(dIndex,dIndex+2);
if(!isNumber(year)||year>"2100" || year< "1900") return false;
if(!isNumber(month)||month>"12" || month< "01") return false;
if(day>getMaxDay(year,month) || day< "01") return false;
return true;
}
function getMaxDay(year,month) {
if(month==4||month==6||month==9||month==11)
return "30";
if(month==2)
if(year%4==0&&year%100!=0 || year%400==0)
return "29";
else
return "28";
return "31";
}
/*
用途:字符1是否以字符串2結束
輸入:str1:字符串;str2:被包含的字符串
返回:如果通過驗證返回true,否則返回false
*/
function isLastMatch(str1,str2)
{
var index = str1.lastIndexOf(str2);
if(str1.length==index+str2.length) return true;
return false;
}
/*
用途:字符1是否以字符串2開始
輸入:str1:字符串;str2:被包含的字符串
返回:如果通過驗證返回true,否則返回false
*/
function isFirstMatch(str1,str2)
{
var index = str1.indexOf(str2);
if(index==0) return true;
return false;
}
/*
用途:字符1是包含字符串2
輸入:str1:字符串;str2:被包含的字符串
返回:如果通過驗證返回true,否則返回false
*/
function isMatch(str1,str2)
{
var index = str1.indexOf(str2);
if(index==-1) return false;
return true;
}
/*
用途:檢查輸入的起止日期是否正確,規則為兩個日期的格式正確,
且結束如期>=起始日期
輸入:
startDate:起始日期,字符串
endDate:結束如期,字符串
返回:
如果通過驗證返回true,否則返回false
*/
function checkTwoDate( startDate,endDate ) {
if( !isDate(startDate) ) {
alert("起始日期不正確!");
return false;
} else if( !isDate(endDate) ) {
alert("終止日期不正確!");
return false;
} else if( startDate > endDate ) {
alert("起始日期不能大于終止日期!");
return false;
}
return true;
}
/*
用途:檢查輸入的Email信箱格式是否正確
輸入:
strEmail:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function checkEmail(strEmail) {
//var emailReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;
var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
if( emailReg.test(strEmail) ){
return true;
}else{
alert("您輸入的Email地址格式不正確!");
return false;
}
}
/*
用途:檢查輸入的電話號碼格式是否正確
輸入:
strPhone:字符串
返回:
如果通過驗證返回true,否則返回false
*/
function checkPhone( strPhone ) {
var phoneRegWithArea = /^[0][1-9]{2,3}-[0-9]{5,10}$/;
var phoneRegNoArea = /^[1-9]{1}[0-9]{5,8}$/;
var prompt = "您輸入的電話號碼不正確!"
if( strPhone.length > 9 ) {
if( phoneRegWithArea.test(strPhone) ){
return true;
}else{
alert( prompt );
return false;
}
}else{
if( phoneRegNoArea.test( strPhone ) ){
return true;
}else{
alert( prompt );
return false;
}
}
}
/*
用途:檢查復選框被選中的數目
輸入:
checkboxID:字符串
返回:
返回該復選框中被選中的數目
*/
function checkSelect( checkboxID ) {
var check = 0;
var i=0;
if( document.all(checkboxID).length > 0 ) {
for( i=0; i<document.all(checkboxID).length; i++ ) {
if( document.all(checkboxID).item( i ).checked ) {
check += 1;
}
}
}else{
if( document.all(checkboxID).checked )
check = 1;
}
return check;
}
function getTotalBytes(varField) {
if(varField == null)
return -1;
var totalCount = 0;
for (i = 0; i< varField.value.length; i++) {
if (varField.value.charCodeAt(i) > 127)
totalCount += 2;
else
totalCount++ ;
}
return totalCount;
}
function getFirstSelectedValue( checkboxID ){
var value = null;
var i=0;
if( document.all(checkboxID).length > 0 ){
for( i=0; i<document.all(checkboxID).length; i++ ){
if( document.all(checkboxID).item( i ).checked ){
value = document.all(checkboxID).item(i).value;
break;
}
}
} else {
if( document.all(checkboxID).checked )
value = document.all(checkboxID).value;
}
return value;
}
function getFirstSelectedIndex( checkboxID ){
var value = -2;
var i=0;
if( document.all(checkboxID).length > 0 ){
for( i=0; i<document.all(checkboxID).length; i++ ) {
if( document.all(checkboxID).item( i ).checked ) {
value = i;
break;
}
}
} else {
if( document.all(checkboxID).checked )
value = -1;
}
return value;
}
function selectAll( checkboxID,status ) {
if( document.all(checkboxID) == null)
return;
if( document.all(checkboxID).length > 0 ){
for( i=0; i<document.all(checkboxID).length; i++ ) {
document.all(checkboxID).item( i ).checked = status;
}
} else {
document.all(checkboxID).checked = status;
}
}
function selectInverse( checkboxID ) {
if( document.all(checkboxID) == null)
return;
if( document.all(checkboxID).length > 0 ) {
for( i=0; i<document.all(checkboxID).length; i++ ) {
document.all(checkboxID).item( i ).checked = !document.all(checkboxID).item( i ).checked;
}
} else {
document.all(checkboxID).checked = !document.all(checkboxID).checked;
}
}
function checkDate( value ) {
if(value=='') return true;
if(value.length!=8 || !isNumber(value)) return false;
var year = value.substring(0,4);
if(year>"2100" || year< "1900") return false;
var month = value.substring(4,6);
if(month>"12" || month< "01") return false;
var day = value.substring(6,8);
if(day>getMaxDay(year,month) || day< "01") return false;
return true;
}
/*
用途:檢查輸入的起止日期是否正確,規則為兩個日期的格式正確或都為空
且結束日期>=起始日期
輸入:
startDate:起始日期,字符串
endDate: 結束日期,字符串
返回:
如果通過驗證返回true,否則返回false
*/
function checkPeriod( startDate,endDate ) {
if( !checkDate(startDate) ) {
alert("起始日期不正確!");
return false;
} else if( !checkDate(endDate) ) {
alert("終止日期不正確!");
return false;
} else if( startDate > endDate ) {
alert("起始日期不能大于終止日期!");
return false;
}
return true;
}
/*
用途:檢查證券代碼是否正確
輸入:
secCode:證券代碼
返回:
如果通過驗證返回true,否則返回false
*/
function checkSecCode( secCode ) {
if( secCode.length !=6 ){
alert("證券代碼長度應該為6位");
return false;
}
if(!isNumber( secCode ) ){
alert("證券代碼只能包含數字");
return false;
}
return true;
}
/****************************************************
function : cTrim(sInputString,iType)
description : 字符串去空格的函數
parameters : iType: 1=去掉字符串左邊的空格
2=去掉字符串左邊的空格
0=去掉字符串左邊和右邊的空格
return value: 去掉空格的字符串
****************************************************/
function cTrim(sInputString,iType)
{
var sTmpStr = ' ';
var i = -1;
if(iType == 0 || iType == 1)
{
while(sTmpStr == ' ')
{
++i;
sTmpStr = sInputString.substr(i,1);
}
sInputString = sInputString.substring(i);
}
if(iType == 0 || iType == 2)
{
sTmpStr = ' ';
i = sInputString.length;
while(sTmpStr == ' ')
{
--i;
sTmpStr = sInputString.substr(i,1);
}
sInputString = sInputString.substring(0,i+1);
}
return sInputString;
}
/*
-------------------------------------------------------------------------------
說 明:JavaScript腳本,驗證表單中的數據項 begin
-------------------------------------------------------------------------------
*/
function checkForm(objFrm){
var len = 0;
len = objFrm.elements.length;
var i = 0;
var objCheck;
//文本框
for(i = 0; i < len; i ++){
objCheck = objFrm.elements[i];
if(objCheck.type =="text" && !f_checkTextValid(objCheck) ){
return false;
}
}
//下拉框
for(i = 0; i < len; i ++){
objCheck = objFrm.elements[i];
if(objCheck.type =="select-one" && !f_checkSelectValid(objCheck) ){
return false;
}
}
//時間段有效
if( f_checkStartAndEndDate(objFrm) == false) return false;
return true;
}
function f_checkSelectValid(obj){
//alert("check select");
if(obj.options.length <= 0){
alert("下拉選框無數據!");
return false;
}
return true;
}
function f_checkStartAndEndDate(frm){
var len = frm.elements.length;
if(len == null && len == 0) return true;
var i=0;
var temp;
var objCheck;
var objStartDate;
var objEndDate;
//alert("start date period check");
try{
for(i=0; i< len ; i++){
objCheck = frm.elements[i];
temp = objCheck.name;
if( temp.indexOf("startDate") >0 ||temp.indexOf("beginDate")>0 )
objStartDate = objCheck;
if( temp.indexOf("endDate") > 0 )
objEndDate = objCheck;
}
//alert(objStartDate.value);
//alert(objEndDate.value);
if(objStartDate.value==null || objStartDate.value =="" || objStartDate.value ==null || objStartDate.value ==""){
return true;
}
return checkTwoDate(objStartDate.value, objEndDate.value);
//alert("end date period check");
}catch(E){}
return true;
}
function f_checkTextValid(obj){
//不能為空
if(obj.getAttribute("isNeed") != null){
if(f_isNotNull(obj) == false) return false;
}
//不能超過長度
if(obj.getAttribute("maxlength") != null){
if(f_checkLength(obj) == false) return false;
}
var checkType ="";
checkType = obj.getAttribute("checkType");
if(checkType==null||checkType=="") return true;
//
if (checkType.indexOf("number") >=0){
if(f_isNumber(obj) == false) return false;
if(f_checkNumType(obj,checkType) == false) return false;
}
//
if (checkType.indexOf("positive") >=0){
if(f_isNumber(obj) == false) return false;
if(f_isPositive(obj)==false) return false;
if(f_checkNumType(obj,checkType) == false) return false;
}
if (checkType.indexOf("date") >=0){
if(f_checkDate(obj) == false) return false;
}
/*
switch(checkType){
case "number": if(f_isNumber(obj) == false) return false;break;
case "date": if(f_checkDate(obj) == false) return false;break;
default:
}
*/
return true;
}
function f_isNotNull(obj){
if(obj.value == ""){
f_alert(obj, " 不允許為空值!");
return false;
}
return true;
}
function f_isNumber(obj){
if(isNaN(obj.value)){
f_alert(obj," 應為數值類型");
return false;
}
return true;
}
function f_checkDate(obj) {
if(checkDate(obj.value) ==false){
f_alert(obj," 不是合法日期格式!");
return false;
}
return true;
}
function f_checkLength(obj){
if(getTotalBytes(obj) > Math.abs( obj.getAttribute("maxlength") ) ){
f_alert(obj," 超出長度限制!");
return false;
}
return true;
}
function f_alert(obj,alertStr){
var fielName = obj.getAttribute("fieldName");
if(fielName == null)
fielName = "";
alert(fielName + "\n" +alertStr);
obj.select();
obj.focus();
}
function f_checkNumType(obj, numType){
//假設: 已經進行數字類型判斷
var strTemp;
var numpric;
var numLen;
var strArr;
var defaultLen = 19;
var defaultpric = 5;
try{
if(numType == null|| numType =="") return f_checkNumLenPrec(obj,defaultLen, defaultpric);
if(numType.indexOf("(") < 0 || numType.indexOf(")") < 0 ) return f_checkNumLenPrec(obj,defaultLen, defaultpric);
strTemp = numType.substr( numType.indexOf("(") + 1 ,numType.indexOf(")") - numType.indexOf("(") -1 );
if(strTemp == null||strTemp =="") return f_checkNumLenPrec(obj,defaultLen, defaultpric);
strArr = strTemp.split(",");
numLen = Math.abs( strArr[0] );
numpric = Math.abs( strArr[1] );
return f_checkNumLenPrec(obj,numLen, numpric);
}catch(e){
alert("in f_checkNumType = " + e);
return f_checkNumLenPrec(obj,defaultLen, defaultpric);
}
}
function f_checkNumLenPrec(obj, len, pric){
var numReg;
var value = obj.value;
var strValueTemp, strInt, strDec;
//alert(value + "=====" + len + "====="+ pric);
try{
numReg =/[\-]/;
strValueTemp = value.replace(numReg, "");
strValueTemp = strValueTemp.replace(numReg, "");
//整數
if(pric==0){
numReg =/[\.]/;
//alert(numReg.test(value));
if(numReg.test(value) == true){
f_alert(obj, "輸入必須為整數類型!");
return false;
}
}
if(strValueTemp.indexOf(".") < 0 ){
//alert("lennth==" + strValueTemp);
if(strValueTemp.length >( len - pric)){
f_alert(obj, "整數位不能超過"+ (len - pric) +"位");
return false;
}
}else{
strInt = strValueTemp.substr( 0, strValueTemp.indexOf(".") );
//alert("lennth==" + strInt);
if(strInt.length >( len - pric)){
f_alert(obj, "整數位不能超過"+ (len - pric) +"位");
return false;
}
strDec = strValueTemp.substr( (strValueTemp.indexOf(".")+1), strValueTemp.length );
//alert("pric==" + strDec);
if(strDec.length > pric){
f_alert(obj, "小數位不能超過"+ pric +"位");
return false;
}
}
return true;
}catch(e){
alert("in f_checkNumLenPrec = " + e);
return false;
}
}
function f_isPositive(obj){
var numReg =/[\-]/;
if(numReg.test(obj.value) == true){
f_alert(obj, "必須為正數!");
return false;
}
return true;
}
/*
function selectedCheckboxCount(form)
功能說明:對Form中選中的可選項計數
參數說明:
form:指定的表單
*/
function selectedCheckboxCount(form){
var length =0;
var i=0;
var count =0;
eles = form.elements;
while(i<eles.length){
obj= eles.item(i);
// type = obj.attributes.item("type").nodeValue;
type = obj.type;
if(type == "checkbox"){
if(obj.checked){
count++;
}
}
i++;
}
return count;
}
//得到字節長度
function getByteLen(str)
{
var l = str.length;
var n = l;
for ( var i=0; i<l; i++ )
if ( str.charCodeAt(i) <0 || str.charCodeAt(i) >255 )
n=n+1;
return n
}
/*
說明:
1.清除表格中的數據(0.0 和 0)
2.如果cell中沒有數據,則自動加上一個空格
3.清除空白行的checkbox
參數:
clearzero:是否清除"0"、"0.0",false不清除、true清除(默認為true)
tablename:要清除的表格名字,默認為sortTable
*/
function clear_table(clearzero,tablename)
{
var tobject;
if(tablename==null)
tobject=gmobj("sortTable");
else
tobject=gmobj(tablename);
//如果table未定義,則不進行過濾
if(tobject==null)
return;
//如果函數調用參數為空,表示要清除0、0.0;反之,不要清除0、0.0。
var clear = (clearzero==null)?true:clearzero;
//清除0、0.0,填補空格
var rows = tobject.rows;
var j=0;
for(var i=0;i<rows.length;i++)
{
//取得第一個cell的屬性clear,如果為1,表示該行沒有數據,則清除該行所有數據
while(tobject.rows[i].cells[j] != null)
{
if(clear)
{
if(tobject.rows[i].cells[j].innerHTML==0 ||tobject.rows[i].cells[j].innerHTML==0.0||tobject.rows[i].cells[j].innerHTML=="")
tobject.rows[i].cells[j].innerText=" ";
}
else
{
if (tobject.rows[i].cells[j].innerHTML=="")
tobject.rows[i].cells[j].innerText=" ";
}
j++;
}
j=0;
}
return true;
}
function gmobj(mtxt) /* Get object by object name */
{
if (document.getElementById) {
m=document.getElementById(mtxt);
} else if (document.all) {
m=document.all[mtxt];
} else if (document.layers) {
m=document.layers[mtxt];
}
return m;
}
/*
-------------------------------------------------------------------------------
說 明:JavaScript腳本,驗證表單中的數據項 end
-------------------------------------------------------------------------------
*/
/*
用途:檢查輸入字符串是否是帶小數的數字格式,可以是負數(并且滿足規定的精度)
輸入:str:字符串
l:總位數
d:小數點后位數
返回:
如果通過驗證返回true,否則返回false
*/
function isDecimal( str,l,d ){
if(isInteger(str)) {
if (l==null) return true;
if (str<0) l--;
if (str.length<=l) return true;
}
var re = /^[-]{0,1}(\d+)[\.]+(\d+)$/;
if (re.test(str)) {
if (l==null) return true;
if (d==null) d=0;
if(RegExp.$1==0&&RegExp.$2==0) return false;
if (RegExp.$1.length+RegExp.$2.length<=l
&& RegExp.$2.length<=d) return true;
}
return false;
}
<div id="Javascript.Div2" class="div" style="width: 240px; height:90px;" align="center">左上...</div>
<SCRIPT LANGUAGE="JavaScript">
function sc2(){
document.getElementById("Javascript.Div2").style.top=document.documentElement.scrollTop
document.getElementById("Javascript.Div2").style.left=document.documentElement.scrollLeft;
}
</SCRIPT>
<div id="Javascript.Div3" class="div" style="width: 240px; height:90px;" align="center">左下...</div>
<SCRIPT LANGUAGE="JavaScript">
function sc3(){
document.getElementById("Javascript.Div3").style.top=
document.documentElement.scrollTop+document.documentElement.clientHeight-document.getElementById("Javascript.Div3").offsetHeight;
document.getElementById("Javascript.Div3").style.left=document.documentElement.scrollLeft;
}
</SCRIPT>
<div id="Javascript.Div4" class="div" style="width: 240px; height:90px;" align="center">右上...</div>
<SCRIPT LANGUAGE="JavaScript">
function sc4(){
document.getElementById("Javascript.Div4").style.top=document.documentElement.scrollTop;
document.getElementById("Javascript.Div4").style.left=
document.documentElement.scrollLeft+document.documentElement.clientWidth-document.getElementById("Javascript.Div4").offsetWidth;
}
</SCRIPT>
<div id="Javascript.Div5" class="div" style="width: 240px; height:90px;" align="center">右下...</div>
<SCRIPT LANGUAGE="JavaScript">
function sc5(){
document.getElementById("Javascript.Div5").style.top=
document.documentElement.scrollTop+document.documentElement.clientHeight-document.getElementById("Javascript.Div5").offsetHeight;
document.getElementById("Javascript.Div5").style.left=
document.documentElement.scrollLeft+document.documentElement.clientWidth-document.getElementById("Javascript.Div5").offsetWidth;;
}
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!--
function scall(){
sc1();sc2();sc3();sc4();sc5();
}
window.onscroll=scall;
window.onresize=scall;
window.onload=scall;
//-->
</SCRIPT>
<div style="position: absolute; top: 0; left: 0; width: 10000px; height: 4000px;"></div>
</BODY>
</HTML>