为啥我的 javascript 代码没有按预期工作

Posted

技术标签:

【中文标题】为啥我的 javascript 代码没有按预期工作【英文标题】:Why my javascript code is not working as expected为什么我的 javascript 代码没有按预期工作 【发布时间】:2021-12-11 12:23:48 【问题描述】:

我正在尝试使用 javascript 验证文本字段。我有一个可用字段和一个数量字段。当输入的数量大于可用数量时,我想在数量字段下方给出一条消息。

我试过的是:

<form method="post" action="/saveBid" id="reviewForm">
                                    <input type="hidden" name="_token" value="csrf_token()" />
                                    <input type="hidden" name="truck_name" value="truck_name" />
                                    <input type="hidden" name="user_name" value="auth_user().first_name" />
                                    <input type="hidden" name="seller_id" value="seller_id" />
                                    <div class="form-group row">
                                        <label class="col-sm-4 col-form-label">Select Milege Gap: </label>
                                        <div class="col-sm-8">
                                        <select class="form-select" name="mileage" id="mileage" onchange="getOption()">
                                            <option>Select </option>
                                            % for p in product_data %
                                            <option value="p.price,p.number_of_products,p.name,p.id,p.number_of_products_sold">p.name</option>
                                            % endfor %
                                        </select>
                                        </div>
                                    </div>
                                    <div class="form-group row">
                                        <label for="available" class="col-sm-4 col-form-label">Available Quantity: </label>
                                        <div class="col-sm-8">
                                            <input type="text" class="form-control" id="available" readonly name="available_qty" />
                                        </div>
                                    </div>
                                    <div class="form-group row">
                                        <label for="truck" class="col-sm-4 col-form-label">Price: </label>
                                        <div class="col-sm-8">
                                            <input type="text" class="form-control" readonly id="truck" name="truck" />
                                        </div>
                                    </div>
                                    <div class="form-group row">
                                        <label for="qty"  class="col-sm-4 col-form-label"> Quantity: </label>
                                        <div class="col-sm-8">
                                            <input type="text" id="qty" name="qty"  class="form-control"  oninput="checkInput(this);" required />
                                            <p id="qty-msg">
                                            </p>
                                        </div>
                                    </div>
                                    <div class="form-group row">
                                        <label for="t_price"  class="col-sm-4 col-form-label"> Total Price: </label>
                                        <div class="col-sm-8">
                                            <input type="text" readonly id="t_price" name="t_price"  class="form-control" />
                                        </div>
                                    </div>
                                    <div class="form-group row">
                                        <label for="inputBid"  class="col-sm-4 col-form-label">Enter Bid Price</label>
                                        <div class="col-sm-8">
                                            <input type="text" class="form-control" id="inputBid" name="bid" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"/>
                                        </div>
                                    </div>
                                    <div class="form-group text-center">
                                        <input type="submit" class="btn btn-primary" id="btn" name="send" value="Send" disabled="disabled">
                                    </div>
                                </form>

Javascript 代码:

 <script>

function getOption()
    
        var select = document.getElementById('mileage');
        var option = select.options[select.selectedIndex];
        var opArr = option.value.split(",");
        
        var price=document.getElementById("truck");
        price.value=opArr[0];
        var available=opArr[1]-opArr[4];
        
        document.getElementById("available").value=available;
        if(available<=0)
            
                alert('Out of Stock');
                document.getElementById("qty").disabled=true;
                document.getElementById("inputBid").disabled=true;
            
            
function checkInput(item)
    
        
        var t_price=document.getElementById("t_price");
        var available=document.getElementById("available");
        var price=document.getElementById("truck");
        var msg=document.getElementById("qty-msg");
        
        if(item.value>available.value)
             
                alert("Quantity" +item.value +"Availabe: "+available.value);
                item.value='';
                msg.innerhtml="* Value must be less than Availabe quantity "+available.value;
                msg.style.color="red";
            
        
        t_price.value=price.value*item.value;
        
    
</script>   

我运行这段代码,如果可用数量是 15,输入的数量是 1,它工作正常。但是当输入的数量不是 1 时,例如 2、3 或其他任何值,它会给出消息。我希望仅在数量大于 15(如 16、17 等)时才发送消息。 但是当我尝试输入 12 时,就可以了。当我尝试输入 3、4 等时,它会给出验证消息。在这种情况下,如果可用数量为 20,则输入的数量 2 将起作用。但是 3 或任何 2 都行不通。为什么会这样。为什么我的 javascript 不能正常工作。

我的输出

当我尝试输入 3 时,这发生在我的输出中

当我尝试在数量字段中输入 2 时,没关系

当我尝试输入 12 时,它正在工作

当我尝试输入 4 时,它不起作用

我只想在输入的数量大于可用数量时显示此错误消息。

【问题讨论】:

比较字符串会给你意想不到的结果,将字符串转换为数字。 【参考方案1】:

正如 cmets 中所说,在比较之前尝试将输入值(字符串)转换为数字。所以它会是这样的:

if(parseInt(item.value)>parseInt(available.value))

    ...

【讨论】:

以上是关于为啥我的 javascript 代码没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的替换没有按预期工作[重复]

为啥我的查询没有按预期工作?

为啥我的依赖属性绑定没有按预期工作?

为啥我的 Firebase 安全规则没有按预期工作?

为啥我的 Laravel 一对一关系没有按预期工作?

为啥我的搜索功能没有按预期工作,我该如何解决?