代码之家  ›  专栏  ›  技术社区  ›  Adam

JS-typeof不适用于输入|文档。getElementById问题

  •  0
  • Adam  · 技术社区  · 7 年前

    我需要寻求帮助来解决两个问题。

    1. document.getElementById.value 保存在 let 不适用于 innerHTML 保存在不同的 允许 . 我看到了一些类似的线索,但它们没有帮助我。

    2. 当我需要通过 typeof ,它只是在JS看不到的情况下运行。

    这是我的密码。谢谢你的建议和帮助。

    function wage() {
        let input = document.getElementById('annualInput').value;
        let output = document.getElementById('resultMonthly').innerHTML;
        
        // it doesn't work, but it works with pure document.getElementById('result').innerHTML = input;
        output = input;
     
        /*  
            if (input !== '') {
                // this if doesn't work even with string and number
                if (typeof input == 'number')
                    document.getElementById('result').innerHTML = input;
            } else {
                document.getElementById('result').innerHTML = 'Please, type your annual wage';
            }
        */
    
        // annual wage devided by 12 months
        let resultMonthly = input / 12;
        let showMonthly = 'Your monthly wage: ' + resultMonthly.toFixed(2);
        
        // monthly wage devided by 20 days
        let resultDaily = resultMonthly / 20;
        let showDaily = 'Your daily wage: ' + resultDaily.toFixed(2);
        
        // daily wage devided by 8 hours
        let resultHourly = resultDaily / 8;
        let showHourly = 'Your hourly wage: ' + resultHourly.toFixed(2);
        
        if (input !== '') {
            document.getElementById('resultMonthly').innerHTML = showMonthly + ' $';
            document.getElementById('resultDaily').innerHTML = showDaily + ' $';
            document.getElementById('resultHourly').innerHTML = showHourly + ' $';
        } else {
            document.getElementById('resultMonthly').innerHTML = 'Please, type your annual wage';
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>Wage App</title>
        <meta charset="utf-8">
        <title>Issue App</title>   
        <link rel="stylesheet" type="text/css" href="wageup.css">
    </head>
    <body>
        <div class="container">
            <div class="jumbotron">            
                <!-- the title and desc -->
                <h1 class="display-4 text-center">WageApp</h1>
                <p class="h6 text-center" id="paragraphTitle">
                    This is a simple App for calculating wage by year, month, day and hour
                </p>
                <hr class="my-4">
    
                <!-- input-form -->
                <form>
                    <div class="form-group">
                        <label for="annualInput">Your annual wage</label>
                        <input type="annualData" class="form-control" id="annualInput" aria-describedby="hep" placeholder="Annual wage in $">
                        <small id="help" class="form-text text-muted">We'll never share your wage with anyone else.</small>
                    </div>
                    <button onclick="wage()" type="button" class="btn btn-primary btn-sm" id="checkButton">Check</button>
                </form>
            </div>
            <div class="alert alert-success" role="alert" id="resultMonthly"></div>
            <div class="alert alert-info" role="alert" id="resultDaily"></div>
            <div class="alert alert-warning" role="alert" id="resultHourly"></div>
        </div>
        
        <!-- JS -->
        <script type="text/javascript" src="wageUp.js">
        <!-- Jquery -->
        <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
        <!-- Bootstrap -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    </body>
    </html>
    2 回复  |  直到 7 年前
        1
  •  2
  •   KevBot    7 年前

    问题1:

    output = input;
    

    output 不是引用元素,而是存储该元素的innerHTML。

    解决问题1:

    你的评论是一个很好的开始:

    document.getElementById('result').innerHTML = input;
    

    var result = document.getElementById('result');
    // later on
    result.innerHTML = input;
    

    问题2:

    if (typeof input == 'number')
    

    这永远不会是真的,因为存储在元素的value属性中的值总是字符串。

    解决问题2:

    您可以通过多种方式检查输入是否为数字的字符串版本,其中一种方法是测试字符串是否为NaN:

    if (!isNaN(input))
    

    由于有很多方法可以进行这种检查,我会四处寻找一种似乎适合您的用例的方法。

        2
  •  1
  •   Kulvar    7 年前

    innerHTML value 是一个具有getter和setter的“魔法”属性。你无法直接引用它们。您可以存储不会更新的当前值,也可以存储节点以使用其魔法属性。

    + 然后用 Number.isNaN() .