用JavaScript实现简单的计算器
2016-06-09 15:33
651 查看
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>计算器</title> <link rel="stylesheet" type="text/css" href="calculator2.css"> </head> <body> <div class="result-area"> <input id="result" class="result" type="text" readonly> </div> <div class="btn-area"> <button id="btn1" class="btn-top" onclick="append(this)">1</button> <button id="btn2" class="btn-top" onclick="append(this)">2</button> <button id="btn3" class="btn-top" onclick="append(this)">3</button> <button id="btn-add" class="btn-top-right" onclick="append(this)">+</button> <button id="btn4" class="btn" onclick="append(this)">4</button> <button id="btn5" class="btn" onclick="append(this)">5</button> <button id="btn6" class="btn" onclick="append(this)">6</button> <button id="btn-sub" class="btn-right" onclick="append(this)">-</button> <button id="btn7" class="btn" onclick="append(this)">7</button> <button id="btn8" class="btn" onclick="append(this)">8</button> <button id="btn9" class="btn" onclick="append(this)">9</button> <button id="btn-mul" class="btn-right" onclick="append(this)">*</button> <button id="btn0" class="btn" onclick="append(this)">0</button> <button id="btn-clear" class="btn" onclick="clr()">C</button> <button id="btn-equal" class="btn" onclick="equal()">=</button> <button id="btn-div" class="btn-right" onclick="append(this)">/</button> <button id="btn-left-bracket" class="btn" onclick="append(this)">(</button> <button id="btn-right-bracket" class="btn" onclick="append(this)">)</button> <button id="btn-point" class="btn" onclick="append(this)">.</button> <button id="btn-mod" class="btn-right" onclick="append(this)">%</button> </div> </body> <script type="text/javascript" src="calculator2.js"></script> </html>
CSS代码
*{ margin: 0; padding: 0; } .result-area{ width: 306px; margin: 60px auto 0; } .result{ width: 304px; height: 40px; border: 1px solid #ccc; text-align: right; line-height: 40px; font-size: 2em; outline: none; } .btn-area{ width: 306px; height: 200px; margin: 20px auto 0; } button{ width: 75px; height: 40px; border: 1px solid #ccc; font-size: 2em; outline: none; float: left; } .btn-top{ margin-right: 2px; } .btn{ margin-right: 2px; border-top: 0; } .btn-right{ border-top: 0; }
JavaScript代码
var result = document.getElementById("result"); // 按下键向显示框添加键上的数字或符号 function append(obj) { var btnText = obj.innerText; var resultText = result.value; if(!inputValid(resultText, btnText)) { alert("输入不合法"); return; } result.value = result.value + btnText; } // 按下清除按钮后清除显示框的内容 function clr() { result.value = ""; } // 按下等于键计算显示框表达式的值 function equal() { if(dividedBy0(result.value)) { alert("除数不能为0"); clr(); return; } try { result.value = parseFloat(eval(result.value).toFixed(8)); } catch(e) { alert("输入不合法"); } } // 判断输入是否合法,如果输入不完整,那么补"0"或右括号或"0"和右括号结合使表达式完整 function inputValid(str, ch) { var exp = str + ch; try { eval(exp); return true; } catch(e) { try { eval(exp + "0"); return true; } catch(e) { try { eval(exp + rightBracketsToFill(exp)); return true; } catch(e) { try { eval(exp + "0" + rightBracketsToFill(exp)); return true; } catch(e) { return false; } } } } } // 获得需要补齐的右括号的数量,并拼接右括号 function rightBracketsToFill(str) { var l = 0; var r = 0; for(var i = 0; i < str.length; i++) { var ch = str.charAt(i); if(ch == "(") { l++; } if(ch == ")") { r++; } } var rightBrackets = ""; for(var i = 0; i < l - r; i++) { rightBrackets = rightBrackets + ")"; } return rightBrackets; } // 导致除数为0的子字符串可能是"/0" "%0" "/.0" "%.0" function dividedBy0WithFormat(str, sub) { var index = str.indexOf(sub); if(index < 0) { return false; } if(index + sub.length == str.length) { return true; } for(var i = index + sub.length; i < str.length; i++) { var ch = str.charAt(i); if(isNaN(ch) && ch != ".") { return true; } if(!isNaN(ch) && ch > 0) { return false; } } return true; } // 判断除数是否为0 function dividedBy0(str) { return dividedBy0WithFormat(str, "/0") || dividedBy0WithFormat(str, "%0") || dividedBy0WithFormat(str, "/.0") || dividedBy0WithFormat(str, "%.0"); }
相关文章推荐
- javascript 正则表达式RegExp.$n
- JavaScript笔记整理——for in循环
- JavaScript中的prototype
- JavaScript笔记整理——原型和原型链
- 使用Servlet+jsp构建MVC体系结构的Web应用
- 关于网页中的无缝滚动的js代码
- js 时间戳转为日期格式
- JS使用userAgent实现浏览器信息的获取
- javascript数组详解
- javascript控制DOM对象
- javascript常用互动方法
- JavaScript事件学习小结(三)js事件对象
- 飞机大战(JavaScript代码)
- JavaScript事件学习小结(二)js事件处理程序
- javaScript事件学习小结(四)event的公共成员(属性和方法)
- 悬浮广告层
- 【JavaScript】函数、运算符、语句、对象和数组
- BOM
- JavaScript事件学习小结(一)事件流
- JavaScript事件学习小结(五)js中事件类型之鼠标事件