HTML和CSS结构:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="jq.js"></script>
<style>
input[type="text"]{
margin-bottom: 20px;
text-align: right;
}
</style>
</head>
<body>
<input type="text"><br>
<div class="number">
<input type="button" value="0">
<input type="button" value="1">
<input type="button" value="2">
<input type="button" value="3">
<input type="button" value="4">
<input type="button" value="5">
<input type="button" value="6">
<input type="button" value="7">
<input type="button" value="8">
<input type="button" value="9">
<input type="button" value=".">
</div>
<div class="char">
<input type="button" value="+">
<input type="button" value="-">
<input type="button" value="*">
<input type="button" value="/">
</div>
<div class="result">
<input type="button" value="=">
</div>
<div class="delete">
<input type="button" value="delete">
</div>
<script> </script>
</body>
</html>

下面来一步步实现计算器的功能

第一步:首先实现点击数字不断的显示出来

    <script>
//存取数字一的容器
var num="";
//给所有数字添加点击事件
$(".number input").click(function(){
//获取当前点击的value值
var value = $(this).val();
//因为 value和num是字符串,加号在这里是连接字符串,然后存进变量num里面
num = num+value;
//把变量num在input里面输出
$("input[type='text']").val(num);
})
</script>

需要注意:

  • val()为input标签专用的一个方法,能获取input标签的value值,括号里面传入参数表示替换掉原来的值
  • 这里变量num需要放在函数外面,如果放在函数里面,每次点击的时候又重新申明了num值为空字符串,达不到我们想要的效果,
  • $(this).val()获取的是一个字符串
  • num在这里的作用相当于一个容易,新的值不断的加上原来的值,并覆盖掉旧的值

第二步:添加运算符事件

     <script>
var num="";
//声明一个变量char,来存放运算符
var char="";
$(".number input").click(function(){
var value = $(this).val();
num = num+value;
$("input[type='text']").val(num);
})
//添加运算符点击事件
$(".char input").click(function(){
//获取当前点击的运算符存进变量char中
char = $(this).val();
//在input框中输出num+char
$("input[type='text']").val(num+char);
})
</script>

第三步:显示出数字1加上数字2

     <script>
var num="";
//申明变量num2,来存放数字2的值
var num2="";
var char="";
$(".number input").click(function(){
var value = $(this).val();
//如果变量char等于空字符串,则存取数字1的值,否则开始存取数字2的值
if(char==""){
num = num+value;
$("input[type='text']").val(num);
}else{
num2 = num2+value;
$("input[type='text']").val(num+char+num2);
}
})
$(".char input").click(function(){
char = $(this).val();
$("input[type='text']").val(num+char);
})
</script>

需要注意:

  • 我这里的数字1和数字2,代表的是需要运算的两个数
  • 什么时候存取数字1和数字2,当我点击了运算符的时候代表我要开始存取数字2,所以这里要做一个if判断,判断变量char是否为空,不为空的时候代表我点击了运算符,需要存取数字2了

第四步:点击等号运算结果

     <script>
var num="";
var num2="";
var char="";
//申明一个变量,来存放结果
var result;
$(".number input").click(function(){
var value = $(this).val();
if(char==""){
num = num+value;
$("input[type='text']").val(num);
}else{
num2 = num2+value;
$("input[type='text']").val(num+char+num2);
}
})
$(".char input").click(function(){
char = $(this).val();
$("input[type='text']").val(num+char);
})
//给等于号添加一个事件
$(".result input").click(function(){
//做一个判断,来根据点击的不同运算符,做不同的运算
switch(char){
case "+":
result = parseFloat(num) + parseFloat(num2);
break;
case "-":
result = parseFloat(num) - parseFloat(num2);
break;
case "*":
result = parseFloat(num) * parseFloat(num2);
break;
case "/":
result = parseFloat(num) / parseFloat(num2);
break;
}
//输出结果
$("input[type='text']").val(result);
})
</script>

第五步:实现连续点击运算符算出结果功能

     <script>
var num="";
var num2="";
var char="";
var result;
$(".number input").click(function(){
var value = $(this).val();
if(char==""){
num = num+value;
$("input[type='text']").val(num);
}else{
num2 = num2+value;
$("input[type='text']").val(num+char+num2);
}
})
$(".char input").click(function(){
//判断num2是否有值,如果有值的情况下点击运算符表示要做运算操作,输出结果和运算符号,
if(num2){
switch(char){
case "+":
result = parseFloat(num) + parseFloat(num2);
break;
case "-":
result = parseFloat(num) - parseFloat(num2);
break;
case "*":
result = parseFloat(num) * parseFloat(num2);
break;
case "/":
result = parseFloat(num) / parseFloat(num2);
break;
}
//把结果存进变量num
num = result;
//把num2清空方便再次点击存数字2
num2 = "";
$("input[type='text']").val(num+char);
}
char = $(this).val();
$("input[type='text']").val(num+char);
})
$(".result input").click(function(){
switch(char){
case "+":
result = parseFloat(num) + parseFloat(num2);
break;
case "-":
result = parseFloat(num) - parseFloat(num2);
break;
case "*":
result = parseFloat(num) * parseFloat(num2);
break;
case "/":
result = parseFloat(num) / parseFloat(num2);
break;
}
$("input[type='text']").val(result);
})
</script>

注意的地方:

  • 为什么要 num = result 这行代码的意义,比如我实现 2+3=5操作,则num="1",char="+",num2="3",result="5", 如果不把result值赋给num,得出5后,再点击运算符就会出现2+,这是因为num的值为2,第40行代码输出了2+
  • num2的值必须清空,如果不清点击了运算符后点击数字,会出现旧的值加上点击的数字,这就不正确了
  • 第39行代码 char = $(this).val(),不能放在判断语句前面,第二次点击了运算符后,我们希望得到前面的运算结果,如果把39行代码放在判断语句前面就会出现点击第二次运算符后,前面的运算根据第二次点击的运算符来计算。

第五步:实现点击等号出结果后,我再点击数字,替换掉原来的值,开始新的运算

 <script>
var num="";
var num2="";
var char="";
var result;
var state = false;
$(".number input").click(function(){
var value = $(this).val();
if(char==""){
//如果点击了等号,并且char为空,清空num和num2的值,方便下面开始存新的数字1
if(state){
num="";
num2="";
//把值设置为false,意义表示没点击等号,没点击等号的时候不让这个if语句执行
state=false;
}
num = num+value;
$("input[type='text']").val(num);
}else{
num2 = num2+value;
$("input[type='text']").val(num+char+num2);
}
})
$(".char input").click(function(){
if(num2){
switch(char){
case "+":
result = parseFloat(num) + parseFloat(num2);
break;
case "-":
result = parseFloat(num) - parseFloat(num2);
break;
case "*":
result = parseFloat(num) * parseFloat(num2);
break;
case "/":
result = parseFloat(num) / parseFloat(num2);
break;
}
num = result;
num2 = "";
$("input[type='text']").val(num+char);
}
char = $(this).val();
$("input[type='text']").val(num+char);
})
$(".result input").click(function(){
switch(char){
case "+":
result = parseFloat(num) + parseFloat(num2);
break;
case "-":
result = parseFloat(num) - parseFloat(num2);
break;
case "*":
result = parseFloat(num) * parseFloat(num2);
break;
case "/":
result = parseFloat(num) / parseFloat(num2);
break;
}
$("input[type='text']").val(result);
//把字符串设为空,方面存取下一步清空操作,然后开始存取数字1的值
char = "";
//点击了等号后值变为true
state = true;
})

这步算是比较绕了,我点击了等号再点击数字需要清空num和num2的值,但是我点击运算符又不能清除num和num2的值,在哪里清空是需要去考虑的,上面我也说了点等号出结果后 点击数字表示我要开始存取变量一的值,那么需要点等号后,清空变量char="",然后才能去点击数字事件里面的 if里面去存取数字1,在存取数字1之前又需要判断是否点击了等号,如果点击了等号才执行清空的操作。

用jQ实现一个简易计算器的更多相关文章

  1. 前端 JavaScript 实现一个简易计算器

    前端使用 JavaScript 实现一个简易计算器,没有难度,但是里面有些小知识还是需要注意的,算是一次基础知识回顾吧. 题目 实现一个简易版的计算器,需求如下: 1.除法操作时,如果被除数为0,则结 ...

  2. 如何使用Java AWT 创建一个简易计算器

    摘要:手把手教你使用 Java AWT 创建一个简易计算器. 本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工 ...

  3. Python之实现一个简易计算器

    自己动手写计算器 一.功能分析 用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里 ...

  4. 制作一个简易计算器——基于Android Studio实现

    一个计算器Android程序的源码部分分为主干和细节两部分. 一.主干 1. 主干的构成 计算器的布局 事件(即计算器上的按钮.文本框)监听 实现计算 2. 详细解释 假设我们的项目名为Calcula ...

  5. java 实现一个简易计算器

    import java.util.Scanner;public class Test { public static void main(String[] args) { count(); } pub ...

  6. C#Windows Form简易计算器实现(上)

    第一次写博客,来分享一个简易计算器的代码.作为一名准程序员,就是要多写代码才能孰能生巧.重视基础知识才能飞的更快更高以及更稳. 代码可能会写的很糟糕,不完美不安全之处希望发现的越多越好 c#编写计算器 ...

  7. mini dc与简易计算器 20165235

    mini dc 任务内容 本次mini dc任务就是通过补充代码来实现整型数据的后缀表达式计算 相关知识 通过利用堆栈这一先进后出的数据结构来实现后缀表达式的计算.通过Stack<Integer ...

  8. 《Java 程序设计》课堂实践项目-简易计算器

    <Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...

  9. 大一C语言学习笔记(10)---编程篇--制作简易计算器,支持加,减,乘,除,取余运算,要求 0 bug

    博主自开学初就一直在努力为自己的未来寻找学习方向,学习编程嘛,尽量还是要抱大腿的,所以我就加入了我们学校的智能设备研究所,别的不说,那的学长们看起来是真的很靠谱,学长们的学习氛围也超级浓厚,所以我就打 ...

随机推荐

  1. PuTTY免输密码自动登录Linux

    1.使用PuTTY安装目录里的puttygen.exe工具.先点“生成(Generate)”,然后随意移动鼠标直到进度条填满,即可生成密钥 公钥部分:把上边那一段文字全选->复制备用.(不要点击 ...

  2. vue-cli 上手

    1.cnpm install --global vue-cli 安装脚手架 2.vue init webpack baoge 创建 3.选择配置项 Project name (baoge): ---- ...

  3. python 安装mysqldb组件

    只能源码安装 源码下载: http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/ http://sourcefor ...

  4. webserive学习记录5-拦截器完成登陆校验

    说说cxf中的拦截器,可以分为系统拦截器(如日志拦截器)和自定义拦截器,也可以分为出拦截器和入拦截器,也可以分为服务器拦截器和客户端拦截器. 下面将实现一个可以进行登陆验证的拦截器,其中用户名作为方法 ...

  5. XSS学习小结

    一.什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 这里我们主要注 ...

  6. mongodb first

    use [database] 使用数据库,新增文档后,数据库被自动创建 show dbs 显示所有数据库 db.[document].insert() 插入数据库 例:db.persons.inser ...

  7. delphi实现映射和断开网络驱动器

    type TNetDiskMapper=class private FNetResource: TNetResource; FUserName,FPassWord:PWideChar; public ...

  8. 在spring MVC 中关于session失效的判断 有一个类SessionStatus

    SessionStatus status 表示的是当前Session的状态  status.isComplete()-->为true时,表示当前Session还未过期;-->false,表 ...

  9. jQuery height()、innerHeight()、outerHeight()函数的区别详解

    参考来源:http://www.jb51.net/article/84897.htm 代码示例(可复制到编辑器直接打开): <!DOCTYPE html> <html lang=&q ...

  10. jenkins 自动构建gitlab项目

    安装的plugin: - kubernetes:1.7.1    - workflow-aggregator:2.5    - workflow-job:2.21    - credentials-b ...