zishu's blog

zishu's blog

一个热爱生活的博主。https://zishu.me

jsでは、運算の際にvalue属性を自由に変数として定義することはできません。

小さなデモを作成しているときに、変数を定義する際に直接 value を書き込むと、データを取得できなかったり、取得した内容が望んでいるものではなかったりすることに気づきました。js での演算では value 属性を変数として自由に定義してはいけません。

まずはコードの一部を見てみましょう。

<input type="text"" id="a">
<span>*</span>
<input type="text" id="b">
<input type="button" value="=" onclick="beto()">
<input type="text" id="sub" disabled>

<script>
    function beto() {
        var a = document.getElementById('a').value
        var b = document.getElementById('b').value
        var sub = document.getElementById('sub').value
        
        sub = a + b
    }
</script>

こう見ると、ロジックには問題がないように見えます。a と b の value を取得し、乗算を行い、sub に出力します。

しかし、ブラウザで実行すると、全く反応がありません。

なぜでしょうか?

(5 分間考えるふりをする...)

sub.value は直接変数に定義することができないからです。

// まずidがsubのinputボックスを定義します
var sub = document.getElementById('sub')

// そして、演算の際に直接sub.valueを使用します
sub.value = a * b

デモ作成時に使用した簡易計算機を紹介します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>簡易計算機</title>
</head>
<body>
    <input type="text"" id="a">
    <select id="c">
        <option value="+">+</option>
        <option value="-">-</option>
        <option value="*">*</option>
        <option value="/">/</option>
    </select>
    <input type="text" id="b">
    <input type="button" value="=" onclick="beto()">
    <input type="text" id="sub" disabled>
   
    <script>
        function beto() {
            var a = document.getElementById('a').value
            var b = document.getElementById('b').value
            var c = document.getElementById('c').value
            var sub = document.getElementById('sub')
            
            switch(c) {
                case  "+":
                sub.value = parseInt(a) + parseInt(b);
                break;
                case  "-":
                sub.value = parseInt(a) - parseInt(b);
                break;
                case  "*":
                sub.value = parseInt(a) * parseInt(b);
                break;
                case  "/":
                sub.value = parseInt(a) / parseInt(b);
                break;
            }
        }
    </script>
</body>
</html>
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。