Javascript计算/更新总计onclick多个表单元素

时间:2017-09-30 10:14:18

标签: javascript jquery html

我帮助朋友建立基本网站。我的javascript技能还有很多不足之处,所以我学习的是我开始使用Javascript而不是Jquery库(旁注:我应该从一开始就使用Jquery ......?)

所以我有以下内容:

  • 带3个单选按钮的表格值为低(1),中(2),高(3)
  • 金额滑块
  • 选择持续时间。

通过用户选择风险(无线电btns)金额(滑块)持续时间(下拉)来计算公式

当用户更改风险,金额或持续时间时,应更新总数,并显示一个按钮。

enter image description here

所以我提出了以下javascript:

JAVASCRIPT:

function getReturn(){
    var risk = document.forms[0];
    var years = document.getElementById("investmentDuration").value;
    var slideAmount  = document.getElementById("slideAmount").value;
    var txt;
    var returns;
    var i;
    for(i = 0; i < risk.length; i++){
        if(risk[i].checked){
            txt = risk[i].value;
            //for
            if(txt == 1){
                returns = (slideAmount * 0.06)*years;
                returns = Math.ceil(returns); // NO decimals

            }
            if(txt == 2){
                returns = slideAmount  * 0.11;
                returns = Math.ceil(returns)*years; // NO decimals

            }
            if(txt == 3){
                returns = slideAmount *0.17;
                returns = Math.ceil(returns)*years; // NO decimals
            }
        }//if
    }//for

然后我将getReturn()函数添加到表单中的每个元素...

当我尝试运行它时,我得到以下内容:here is my JS FIDDLE

错误: getReturn() is not defined

HTML (请注意每个元素的点击功能)

 <h2>SELECT INVESTMENT RISK LEVEL</h2>
    <section>
        <div>
           <input type="radio"  id="control_01" onclick="getReturn()" name="risk" value="1" checked>
            <label for="control_01">
                <h2>LOW RISK</h2>
                <p>Slow & Steady. An Product Focused On Low Risk But Long term Gains</p>
            </label>
        </div>
        <div>
            <input type="radio" id="control_02" name="risk" onclick="getReturn()" value="2">
            <label for="control_02">
                <h2>MEDIUM</h2>
                <p>Prepare For Glory. Medium To High Returns, Over A Medium To Long Period.</p>
            </label>
        </div>
        <div>
            <input type="radio" id="control_03" name="risk" onclick="getReturn()" value="3">
            <label for="control_03">
                <h2>High Risk</h2>
                <p>Hardcore Investor. Tailored Based Package Focused on High Returns Over Short Periods</p>
            </label>
        </div>
    </section>

 <h4 style="color: black;">INVESTMENT AMOUNT:</h4>
        <input type="range" id="slideAmount" name="slideAmount" onchange="getReturn()" value="6500" step="25" min="1000" max="10000">

  <p>Number Of Years</p>
            <select  name="investmentDuration" id="investmentDuration" onclick="getReturn()">
                <option value="1" selected>1 Year</option>
                <option value="2">2 Years</option>
                <option value="3">3 Years</option>
                <option value="4">4 Years</option>
                <option value="5">5 Years</option>
            </select>

更新

我开始工作,但感觉

  1. 每个元素都有onclick() / onchange = function()似乎效率低下。
  2. 如果页面变大并扩展,我觉得代码容易出错。
  3. 任何建设性的批评和/或建议都对我如何在这方面的工作和改进表示赞赏。非常感谢

1 个答案:

答案 0 :(得分:1)

你得到了

  

getReturn()未定义

错误,因为您的代码位于onLoad事件中(是jsfiddle 中的默认值)

您需要更改此设置,如图所示,以便您的功能位于全局范围内,因此可以从DOM调用。

enter image description here

然后您还需要在html中添加#returns元素。

最后的改进可能是在范围元素上使用oninput事件,以便在您滑动时进行更新

所有修正:https://jsfiddle.net/gaby/o1zmvmL9/2/