2012/11/7 18:51:05作者:佚名來源:網(wǎng)絡(luò)
【實(shí)例名稱】
實(shí)用計(jì)算器JS代碼
【實(shí)例描述】
JavaScript雖然是腳本語言,但也可以設(shè)計(jì)一些常用的工具,如日歷,計(jì)算器等。本例學(xué)習(xí)使用JavaScript制作計(jì)算器。
【實(shí)例代碼】
<html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>標(biāo)題頁-學(xué)無憂(wangbatian.cn)</title> <script language="JavaScript"> var results='' ; //顯示結(jié)果 var previouskey=''; //代表上一個(gè)字符 var re=/(\/|\*|\+|-)/ //用來判斷+-*/的正則 var re2=/(\/|\*|\+|-){2}$/; //用來判斷出現(xiàn)2次+-*/的正則 var re3=/.+(\/|\*|\+|-).+/; //用來判斷小數(shù)點(diǎn)+-*/的正則 var re4=/\d|\./ ; //用來判斷(小數(shù)點(diǎn)或數(shù)值)的正則 var re5=/^[^\/\*\+].+\d$/; //用來判斷(以+-*/開始)的正則 var re6=/\./; //用來判斷小數(shù)點(diǎn)的正則 //計(jì)算結(jié)果的方法 function calculate() { //判斷如何用戶輸入了1個(gè)值,然后單擊了"=" if (event.srcElement.tagName=="TD"){ if (event.srcElement.innerText.match(re4)&&previouskey=="=") results=''; if (result.innerText.match(re3)&&event.srcElement.innerText.match(re)){ if (!results.match(re5)){ result.innerText="輸入錯(cuò)誤!"; return; } //以下是要求長度只能保持在12位以內(nèi)(有小數(shù)點(diǎn)的情況下) results=eval(results); //轉(zhuǎn)換為數(shù)值 if (results.toString().length>=12&&results.toString().match(re6)) results=results.toString().substring(0,12); result.innerText=results; } //出現(xiàn)2次計(jì)算符號(hào)的情形 results+=event.srcElement.innerText; if (results.match(re2)) results=results.substring(0,results.length-2)+ results.charAt(results.length-1); result.innerText=results; }} function calculateresult() { //當(dāng)首字符輸入錯(cuò)誤時(shí) if (!results.match(re5)){ result.innerText="輸入錯(cuò)誤!"; return;} results=eval(results); //轉(zhuǎn)換結(jié)果為數(shù)值型 if (results.toString().length>=12&&results.toString().match(re6)) results=results.toString().substring(0,12); result.innerText=results; } function pn() { //首字符為負(fù)數(shù)的計(jì)算 if (result.innerText.charAt(0)!='-') result.innerText=results='-'+result.innerText else if (result.innerText.charAt(0)=='-') result.innerText=results=result.innerText*(-1) } </script>
需要在body中添加一個(gè)Table,用來呈現(xiàn)計(jì)算器的外觀,代碼如下所示: </head> <body> <table border="0" cellspacing="0" cellpadding="0" width="400"> <tr> <td width="100%" valign="top"><table border="2" width="200" cellspacing="0" cellpadding="0" bgcolor="#000000" style="border-color:black" onClick="previouskey=event.srcElement.innerText"> <tr> <td width="100%" bgcolor="#FFFFFF" id="result" style="font:bold 20px Verdana;color:black; text-align='right'">0</td> </tr> <tr> <td width="100%" valign="middle" align="center"><table border="0" width="100%" cellspacing="0" cellpadding="0" style="font:bold 20px Verdana;color:white"> <tr><td width="80%" align="center"><table border="1" width="100%" cellspacing="0" cellpadding="0" style="cursor:hand;font:bold 20px Verdana;color:white" onMouseover="if (event.srcElement.tagName=='TD') event.srcElement.style.color='yellow'" onMouseout="event.srcElement.style.color='white'" onselectStart="return false" onClick="calculate()" height="82"> <tr><td width="25%" align="center" height="17">7</td> <td width="25%" align="center" height="17">8</td> <td width="25%" align="center" height="17">9</td> <td width="25%" align="center" height="17">/</td> </tr><tr><td width="25%" align="center" height="19">4</td> <td width="25%" align="center" height="19">5</td> <td width="25%" align="center" height="19">6</td> <td width="25%" align="center" height="19">*</td> </tr><tr><td width="25%" align="center" height="19">1</td> <td width="25%" align="center" height="19">2</td> <td width="25%" align="center" height="19">3</td> <td width="25%" align="center" height="19">-</td> </tr><tr><td width="25%" align="center" height="19">0</td> <td width="25%" align="center" height="19" onClick="pn();previouskey=1;event.cancelBubble=true">+/-</td> <td width="25%" align="center" height="19">.</td> <td width="25%" align="center" height="19">+</td> </tr></table></td><td width="20%"><div align="left"> <table border="1" width="100%" cellspacing="0" cellpadding="0"><tr><td width="100%" style="cursor:hand;font:bold 20px Verdana; color:white;text-align:center" onClick="result.innerText=0;results=''">C</td> </tr></table></div><div align="left"><table border="1" width="100%" cellspacing="0" cellpadding="0" height="81"> <tr><td width="100%" style="cursor:hand;font:bold 32px Verdana; color:white;text-align:center" onMouseover="event.srcElement.style.color='yellow'" onMouseout="event.srcElement.style.color='white'" onClick="calculateresult()">= </body> </html>
【運(yùn)行效果】
【難點(diǎn)剖析】
本例的重點(diǎn)在于對(duì)用戶輸入字符的判斷。這里要提到的就是正則表達(dá)式,其在JavaScript中的應(yīng)用非常靈活,可用來判斷用戶輸入的數(shù)字符是否合法,也可用來截取頁面的內(nèi)容。本例對(duì)使用的正則表達(dá)式進(jìn)行了詳細(xì)的注釋,要了解正則表達(dá)式的詳細(xì)應(yīng)用語法,可參考相關(guān)資料。
【源碼下載】
為了JS代碼的準(zhǔn)確性,請(qǐng)點(diǎn)擊:實(shí)用計(jì)算器 進(jìn)行本實(shí)例源碼下載
標(biāo)簽: 實(shí)用 計(jì)算器 JS代碼
相關(guān)文章
ABBYY FineReader 15中文v15.0.18.1494
詳情Adobe indesign cs6中文版
詳情金山數(shù)據(jù)恢復(fù)大師官方版 v1.0.0.2
詳情南方測繪Cass10v10.1.6中文
詳情revit 2017
詳情KeyShot Pro 9中文(附安裝教程) v9.0.286
詳情網(wǎng)易新聞客戶端v105.3
詳情AIMP4v5.11.2421中文綠色美化版
詳情onekey一鍵還原v18.0.18.1008
詳情浩辰CAD2020綠色v20.0
詳情好圖網(wǎng)圖標(biāo)轉(zhuǎn)換工具v4.9.7
詳情aardiov35.0.0中文最新版
詳情Adobe Creative Cloud 2024簡體中文v5.3.0.48
詳情暴風(fēng)影音16 v9.04.1029去廣告精簡版
詳情ASP.NET Maker 2019(ASP.NET代碼生成工具)v12.0.4.0
詳情暴風(fēng)影音v5.92.0824.1111
詳情使命召喚17官方中文版 v1.0
詳情死亡之雨新的僵尸病毒中文v1.0綠色免安裝版
詳情輻射4v1.7.15.0整合版
詳情克莉2v1.0中文版
詳情冬日計(jì)劃v1.2中文版
詳情刺客信條英靈殿v1.0吾愛
詳情刺客信條英靈殿終極v1.0免安裝
詳情動(dòng)物森友會(huì)v1.10.0最新
詳情哈迪斯殺出地獄v1.37中文
詳情嗜血印中文豪華版v1.0豪華版 附游戲攻略秘籍
詳情城市戰(zhàn)斗v1.0中文
詳情尼爾人工生命v1.0steam免費(fèi)
詳情尼爾人工生命升級(jí)版v1.0PC
詳情層層恐懼2中文v1.0綠色免安裝版
詳情往日不再v1.0 steam
詳情往日不再v1.0pc
詳情圣劍聯(lián)盟官方正版v3.5.3安卓版
詳情小生活游戲內(nèi)置MOD版v2.0(78)安卓版
詳情使命召喚手游測試服最新版v1.9.41安卓版
詳情三國謀定天下官服v1.2.1安卓版
詳情熱血新手村高爆版v1.0.0安卓版
詳情我養(yǎng)你啊手機(jī)版v1.0.0安卓版
詳情看懂了就很恐怖的故事(細(xì)思極恐)中文版v1.0安卓版
詳情背包英雄中文手機(jī)版v1.1.1安卓版
詳情glow官方版v2.0.9安卓版
詳情三國大時(shí)代4霸王立志官方正版v1.9安卓版
詳情飛盧小說閱讀器手機(jī)版v7.0.9安卓版
詳情牛牛粵語詞典軟件v20.4.4安卓版
詳情PrettyUp視頻美化瘦身軟件v2.3.0
詳情化學(xué)方程式app中文版v1.1.0.20安卓版
詳情地下城堡3魂之詩2024安卓最新版v1.2.3安卓版
詳情南方都市報(bào)v6.10.0安卓版
詳情