博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript:综合案例---房贷计算器的实现
阅读量:4561 次
发布时间:2019-06-08

本文共 7857 字,大约阅读时间需要 26 分钟。

房贷计算器的实现

  (可以使用的编辑器:webStrom、subLime、notePad++、editPlus)

输入数据:

  平方单价    70,000.00 元/平方    B1
  租金      382.50 元/平方     B2
  物业费     50.50 元/平方     B3
  面积      200 平方        B4
  首付比例    40% 成          B5
  贷款利息    4%            B6

输出数据(计算过程):

  首付金额     5,600,000.00 元     B8     公式:B1 x B4 x B5
  贷款总额       8,400,000.00 元   B9     公式:B1 x B4 x (100% -B5)
  每月支付利息    28,000.00 元/月    B10    公式:B9 x B6/12
  每月租金      76,500.00 元/月    B11    公式:B2 x B4
  每月物业费       10,100.00 元/月   B12    公式:B4 x B3

实现表单界面:
  第一层(inputDiv):作为输入数据使用
  第二层(butDiv):控制器按钮
  第三层(calDiv): 显示所有的计算结果

    1、建立css文件夹,将from.css文件拷贝到此文件夹当中

    2、建立一个页面:house.html
    3、在代码之中进行表单控件的填充操作

事件验证要使用动态的事件绑定:

  1、在js目录中建立:house.js文件;

  2、考虑到代码常用性问题,建立一个util.js文件,作为公共操作文件;
  3、在house.html页面之中导入这两个js文件;
  4、首先在util.js进行公共的验证操作;
  5、需要为每一个具体的输入设置验证函数,实在house.js文件中完成的;

数据的计算操作

  1、对于计算按钮绑定事件处理,并计算输出数据,需要使用parseFloat()将字符串数据转换一下才可以计算。

  2、设置重置按钮事件,对输入数据进行清空 。

 

具体代码如下:

house.html

    
房贷计算器
房贷计算器
出售单价(¥/m2): 请输入房屋出售单价/平米
出租单价(¥/m2): 请输入房屋出租单价/平米
物业费(¥/m2): 请输入物业费用/平米
房屋面积(m2): 请输入房屋面积
首付比例: 请选择首付的比例
贷款利息: 请输入贷款的利率(%)
首付金额:
贷款金额:
每月支付利息:
每月支付租金:
每月物业费:
View Code

form.css

/*成功*/.success{
background:#f5f5f5; font-weight:bold; color:#000000; border:solid 1px #009900; /*边框为绿色*/}/*失败*/.failure{
background:#f5f5f5; font-weight:bold; color:#000000; border:solid 1px #990000; /*边框为红色*/}/*初始化*/.init{
background:#f5f5f5; font-weight:bold; color:#000000;}
View Code

house.js

//为页面动态绑定事件window.onload = function(){    bindEvent(ele("unitPrice"),"blur",function(){        validateUnitPrice();    });        bindEvent(ele("rentPrice"),"blur",function(){        validateRentPrice();    });    bindEvent(ele("proPrice"),"blur",function(){        validateProPrice();    });    bindEvent(ele("area"),"blur",function(){        validateArea();    });    bindEvent(ele("cost"),"blur",function(){        validateCost();    });    bindEvent(ele("calBut"),"click",function(){        if (validateForm()) {  //表单通过验证之后可以进行具体的计算操作            calDiv_SpanInnerHTML();        };    });    bindEvent(ele("restBut"),"click",function(){        resetForm();    });}//验证出售单价function validateUnitPrice() {    return validateNumber("unitPrice");}//验证出租单价function validateRentPrice() {    return validateNumber("rentPrice");}//验证物业费用function validateProPrice() {    return validateNumber("proPrice");}//验证住房面积function validateArea() {    return validateNumber("area");}//验证贷款利息function validateCost() {    return validateNumber("cost");}//提交验证表单function validateForm () {    return validateUnitPrice() && validateRentPrice() && validateProPrice() && validateArea() && validateCost();}//重置表单function resetForm () {        //输入的数据置空    ele("unitPrice").value = "";    ele("rentPrice").value = "";    ele("proPrice").value = "";    ele("area").value = "";    ele("cost").value = "";    //设置input样式为初始化    ele("unitPrice").className = "init";    ele("rentPrice").className = "init";    ele("proPrice").className = "init";    ele("area").className = "init";    ele("cost").className = "init";    //重新设置提示信息    ele("unitPriceSpan").innerHTML = "请输入房屋出售单价/平米";    ele("rentPriceSpan").innerHTML = "请输入房屋出租单价/平米";    ele("proPriceSpan").innerHTML = "请输入物业费用/平米";    ele("areaSpan").innerHTML = "请输入房屋面积";    ele("costSpan").innerHTML = "请输入贷款的利率(%)";}//计算输出数据function calDiv_SpanInnerHTML () {    //取出数据    var unitPrice =  parseFloat(ele("unitPrice").value);    var rentPrice =  parseFloat(ele("rentPrice").value);    var proPrice =   parseFloat(ele("proPrice").value);    var area =  parseFloat(ele("area").value);    var pay =   parseFloat(ele("pay").value);    var cost =  parseFloat(ele("cost").value);    //计算数据并输出(方式一:保留两位小数)    // ele("firstResult").innerHTML = (unitPrice * area * pay).toFixed(2);    // ele("allResult").innerHTML =   (unitPrice * area * (1-pay/100)).toFixed(2);    // ele("costResult").innerHTML =  (unitPrice * area * (1-pay/100) * cost/12).toFixed(2);    // ele("rentResult").innerHTML =  (rentPrice * area).toFixed(2);    // ele("proResult").innerHTML =   (area * proPrice).toFixed(2);    //计算数据并输出(方式二:保留两位小数)    ele("firstResult").innerHTML = fomatFloat (unitPrice * area * pay , 2);    ele("allResult").innerHTML =   fomatFloat (unitPrice * area * (1-pay/100) , 2);    ele("costResult").innerHTML =  fomatFloat (unitPrice * area * (1-pay/100) * cost/12 , 2);    ele("rentResult").innerHTML =  fomatFloat (rentPrice * area , 2);    ele("proResult").innerHTML =   fomatFloat (area * proPrice , 2);}/** *    保留两位小数 *    @pragm src    要计算的数据 *    @pragm pos    保留位数*/function fomatFloat(src,pos){          return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);       }
View Code

util.js

/** * 表示进行数据是否为空的验证操作 * @param eleId 表示要操作的组件ID名称 */function validateEmpty(eleId) {    var obj = ele(eleId);  //取得指定的对象    if (obj != null) {     //现在对象已经取得        if (obj.value == "") {            setFailure(obj);            return false;        }else{            setSuccess(obj);            return true;        }    }    return false;}/** * 使用正则进行数据的验证 * @param  eleId 组件的元素id * @param  regex 正则验证规则 */function validateRegex(eleId,regex) {    var obj = ele(eleId);//取得指定的对象    if (validateEmpty(eleId)) {  //有数据        if (!regex.test(obj.value)) {            setFailure(obj);            return false;        }else{            setSuccess(obj);            return true;        }    }    return false;}/** * 验证输入的内容是否是数字,包含小数 * @param   eleId  组件的元素的id */function validateNumber(eleId) {     return validateRegex(eleId,/^\d+(\.\d+)?$/);}/** * 根据id取得一个具体的对象,是简化调用的难度 * @param eleId 表示要操作的组件ID名称 */function ele(eleId) {    return document.getElementById(eleId);}/** * 根据id取得一个具体的对象集合,是简化调用的难度 * @param eleId 表示要操作的组件ID名称 */function allEle(eleId) {    return document.all(eleId);}/** *  设置信息正确和错误时样式 *  @param obj 要进行样式信息设置的元素 *  @param className 样式名称 *  @param text 显示的文本信息 */function setValidateStyle(obj,className,text) {    var spanObj = ele(obj.id+"Span");  //根据对象的id属性找到Span    obj.className = className;    if (spanObj != null) {        spanObj.innerHTML = text;    }}function setSuccess(obj) {    setValidateStyle(obj,"success","");    }function setFailure(obj) {    setValidateStyle(obj,"failure","×");    }/** * 动态绑定事件 * @param  eventType 事件类型 * @param  obj       事件执行对象 * @param  fun       事件操作函数 */function bindEvent(obj,eventType,fun) {    obj.addEventListener(eventType,fun,false);}
View Code

 

演示截图:

 默认时(或者重置时):

 数据为空时:

 数据不为空时:

 计算结果时: 

 

转载于:https://www.cnblogs.com/XYQ-208910/p/5845680.html

你可能感兴趣的文章
python基础学习目录
查看>>
卷积神经网络是如何工作的(译文)
查看>>
微信开发 笔记1
查看>>
SQL server 删除日志文件 秒删
查看>>
MethodChannel 实现flutter 与 原生通信
查看>>
lua的性能优化
查看>>
vs2012 出现断点无法命中 解决方案。
查看>>
weex图片加载更多方法loadmore的使用
查看>>
创建您的 ActiveReports Web端在线报表设计器
查看>>
项目复审
查看>>
FreeMarker学习
查看>>
hihocoder 1631
查看>>
2018大都会赛 A Fruit Ninja【随机数】
查看>>
【实战HTML5与CSS3】用HTML5和CSS3制作页面(上)
查看>>
小公司的一年,一起看看小公司的前端可以怎么做
查看>>
oracle数据批处理
查看>>
Json网络解析
查看>>
[转]Google Chrome/IE/FireFox查看HTTP请求头request header响应头
查看>>
Harris角点检测
查看>>
Struts2的处理流程及为Action的属性注入值
查看>>