简体   繁体   中英

Javascript Two calculators on one site

Hi i have this code on my site`

<body>
    <script>
        function calcResult() {
            document.getElementById('result').innerHTML = '';
            var num1 = new Number(document.getElementById('txt1').value);
            var num2 = new Number(document.getElementById('txt2').value);
            if (isNaN(num1) || isNaN(num2)) {
                alert('One or both inputs are not a number');
            } else {
                document.getElementById('result').innerHTML = num1 * num2;
            }
        }
        window.onload = function() {
            document.getElementById('btnCalc').onclick = calcResult;
        }
    </script>
    <div>
        Enter value 1
        <input type="text" id="txt1" />
        <br />Enter value 2
        <input type="text" id="txt2" />
        <br />
        <button id="btnCalc">Calculate difference</button>
        <div id="result"></div>
    </div>
    <script>
        function test() {
            document.getElementById('re').innerHTML = '';
            var n1 = new Number(document.getElementById('od1').value);
            var n2 = new Number(document.getElementById('od2').value);
            if (isNaN(n1) || isNaN(n2)) {
                alert('One or both inputs are not a number');
            } else {
                document.getElementById('re').innerHTML = n1 - n2;
            }
        }
        window.onload = function() {
            document.getElementById('od').onclick = test;
        }
    </script>
    <div>
        Enter value 1
        <input type="text" id="od1" />
        <br />Enter value 2
        <input type="text" id="od2" />
        <br />
        <button id="od">Calculate difference</button>
        <div id="re"></div>
    </div>
</body>

The problem is that first form isnt working and the second is working. On my site i want many of these calculator, but i dont know why is not working. I will be gradefull if someone help me find result.

Write all javascript code in one script tag. Try the following code

<body>
    <script>
                    function calcResult(){

            document.getElementById('result').innerHTML = '';
            var num1 = new Number(document.getElementById('txt1').value);
            var num2 = new Number(document.getElementById('txt2').value);
            if(isNaN(num1) || isNaN(num2)){
                alert('One or both inputs are not a number');
            } else {
                document.getElementById('result').innerHTML = num1 * num2;
            }
        }
           function test(){
            document.getElementById('re').innerHTML = '';
            var n1 = new Number(document.getElementById('od1').value);
            var n2 = new Number(document.getElementById('od2').value);
            if(isNaN(n1) || isNaN(n2)){
                alert('One or both inputs are not a number');
            } else {
                document.getElementById('re').innerHTML = n1 - n2;
            }
        }
        window.onload=function(){
            document.getElementById('btnCalc').onclick = calcResult;
            document.getElementById('od').onclick = test;
        }
    </script>
    <div>
        Enter value 1 <input type="text" id="txt1" /><br />
        Enter value 2 <input type="text" id="txt2" /><br />
        <button id="btnCalc">Calculate difference</button>
        <div id="result"></div>
    </div>

    <div>
        Enter value 1 <input type="text" id="od1" /><br />
        Enter value 2 <input type="text" id="od2" /><br />
        <button id="od">Calculate difference</button>
        <div id="re"></div>
    </div>
</body>

If both functions are equal (you just want to execute three diference elements),

use element's Ids as parameters in function argument and call it as often as you wish with any diference Id.

<body>
<script>
<div>
    Enter value 1 <input type="text" id="txt1" /><br />
    Enter value 2 <input type="text" id="txt2" /><br />
    <button id="btnCalc">Calculate difference</button>
    <div id="result"></div>
</div>
<script>
    function test(id){
        document.getElementById(id, id2, id3).innerHTML = '';
        var n1 = new Number(document.getElementById(id2).value);
        var n2 = new Number(document.getElementById(id3).value);
        if(isNaN(n1) || isNaN(n2)){
            alert('One or both inputs are not a number');
        } else {
            document.getElementById(id).innerHTML = n1 - n2;
        }
    }
    window.onload=function(){
        document.getElementById('btnCalc').onclick = function(){ test("result", "txt1", "txt2") };
        document.getElementById('od').onclick = function(){ test("re", "od1", "od2") };
    }
</script>
<div>
    Enter value 1 <input type="text" id="od1" /><br />
    Enter value 2 <input type="text" id="od2" /><br />
    <button id="od">Calculate difference</button>
    <div id="re"></div>
</div>

<script type="text/javascript">
function calcResult(resultId, valId, val2Id, operation) {
    var $result = document.getElementById(resultId);
    $result.innerHTML = '';
    var num1 = new Number(document.getElementById(valId).value);
    var num2 = new Number(document.getElementById(val2Id).value);
    if (isNaN(num1) || isNaN(num2)) {
        alert('One or both inputs are not a number');
    } else {
        $result.innerHTML = operation(num1, num2);
    }
}
window.onload = function() {
    document.getElementById('btnCalc').onclick = function() {
        calcResult('result', 'txt1', 'txt2', function(num1, num2) {
            return num1 * num2;
        });
    }
    document.getElementById('od').onclick = function() {
        calcResult('re', 'od1', 'od2', function(num1, num2) {
            return num1 - num2;
        });
    };
}
</script>
  • Put all the scripts in one <script> tag.
  • Also, there's a room for improvement on your program. see below:

i can see that eventhough your button is named "calculate difference" ,
the first form is calculating the product and the second form is calculating the difference , thus, using this, you can rewrite your code in such a way that you only have one function for both operations, just pass the elementIds as parameters and a function which takes care which operation to apply. like the one I wrote above.

see it here: http://jsfiddle.net/1yo4ypc2/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM