如何在Codeigniter中得到比较三个值的结果

问题描述 投票:0回答:1

我想询问有关 Javascript 和 Codeigniter 的问题。

我想得到三个整数值比较的结果。我已经尝试过,但结果只显示一个结果,并且结果仅通过。即使我设置了两个结果通过和失败。

这里的代码:[编辑:到目前为止我尝试过的]

        function sum_method(){
                function sum_method(){
                    var result = document.querySelector('[name="result"]')[0].value;
                    var value_from = document.querySelector('[name="value_from"]').value;
                    var value_to = document.querySelector('[name="value_to"]').value;

                    var result1 = parseInt(value_from) >= parseInt(result);
                    var result2 = parseInt(value_to) <= parseInt(result);
                    
                    if ((result1) == true && (result2) == true)
                    {
                        document.querySelector('[name="status"]').value = 'pass';
                    }else{
                        document.querySelector('[name="status"]').value = 'fail';
                    }
                }
            }

现场测试结果将与要求值 from 和 value to 进行比较,状态将显示比较结果通过或失败

你们能给我看一下好的代码吗?

javascript codeigniter
1个回答
0
投票

代码中存在一些问题:

  1. document.querySelector('[name="result"]')[0].value;
    是一个语法错误。
    querySelector
    返回单个元素
    ,而不是数组,因此此行会引发错误,并且您的
    result
    变量永远不会被设置。如果您检查浏览器的开发工具控制台,您会看到此错误。

  2. 从您的问题文本中不清楚测试应该检查什么,但根据您的

    input
    的名称,我认为
    result
    值应该在
    from
     之间to
    要传递的值?例如,from=1 和 to=10,1 到 10 之间的任何值都应该通过?

    如果是这样,您只需将测试倒退即可:

    var result1 = parseInt(value_from) >= parseInt(result);
    var result2 = parseInt(value_to) <= parseInt(result);
    

    from
    值是可接受值范围的底部,因此
    result
    必须大于才能通过。并且 result2
     是范围的 
    top,因此 result
     必须小于
    才能通过。 如果您在逻辑上遇到问题,请添加一些

    console.log()

    来检查数字。

    
    

  3. 解决这两个问题就足以让您的代码正常工作,运行下面的代码片段即可查看。在任意输入字段中输入数字进行测试。

// Run the check every time a key is pressed in an input let allInputs = document.querySelectorAll("input"); allInputs.forEach(function(elem) { elem.addEventListener("keyup", function() { sum_method(); }); }); // Run the check function sum_method() { // console.log('sum_method'); var result = document.querySelector('[name="result"]').value; var value_from = document.querySelector('[name="value_from"]').value; var value_to = document.querySelector('[name="value_to"]').value; // console.log('result:', result, 'value_from:', value_from, 'value_to:', value_to); var result1 = parseInt(value_from) <= parseInt(result); var result2 = parseInt(value_to) >= parseInt(result); // console.log('result1', result1, 'result2', result2); if (result1 == true && result2 == true) { document.querySelector('[name="status"]').value = 'pass'; } else { document.querySelector('[name="status"]').value = 'fail'; } }
From: <input type="text" name="value_from" value="1">
To: <input type="text" name="value_to" value="10">

<p>Test Result: <input type="text" name="result"></p>

<p>Status: <input type="text" name="status" readonly></p>

建议

IMO,你将测试混合在一起并不奇怪,因为代码比应有的更加复杂和混乱。如果您需要检查一个值是否在其他 2 个值之间,这样的测试在您编写时会更容易阅读、理解和正确执行:

if (lower <= value && value <= higher) {

下面的简化片段。

// Run the check every time a key is pressed in an input let allInputs = document.querySelectorAll("input"); allInputs.forEach(function(elem) { elem.addEventListener("keyup", function() { sum_method(); }); }); // Run the check function sum_method() { var result = parseInt(document.querySelector('[name="result"]').value); var value_from = parseInt(document.querySelector('[name="value_from"]').value); var value_to = parseInt(document.querySelector('[name="value_to"]').value); if (value_from <= result && result <= value_to) { document.querySelector('[name="status"]').value = 'pass'; } else { document.querySelector('[name="status"]').value = 'fail'; } }
From: <input type="text" name="value_from" value="1">
To: <input type="text" name="value_to" value="10">

<p>Test Result: <input type="text" name="result"></p>

<p>Status: <input type="text" name="status" readonly></p>

© www.soinside.com 2019 - 2024. All rights reserved.