Jquery键控在两个数字之后触发


$(".maxQtyclass").keyup(function () { 
    var maxQty = $(this).attr('data-qty');
    //lets say it is 8
    if ($(this).val() > maxQty
        && e.keyCode != 46 // delete
        && e.keyCode != 8 // backspace
    ) { 
        $(this).val(maxQty);
        alert('Only ' + maxQty + ' unit(s) available!');
        return false; 
    } 
});

当我按 8 时(没有消息,因为 8 不比 8>。当我按 9 时,它会触发警报,指出只有 8 个单位可用。到目前为止一切顺利,但是当我按 12 时它不会触发警报,为什么?12 比 8>。看起来键键只读取输入的第一个数字。如何强制键控读取数字 12?

你需要在函数中传递事件对象来获取键码

$(".maxQtyclass").keyup(function (e) { 
        var maxQty = $(this).attr('data-qty');
        //lets say it is 8
        if (parseInt($(this).val()) > parseInt(maxQty)
            && e.keyCode != 46 // delete
            && e.keyCode != 8 // backspace
            ) { 
                $(this).val(maxQty);
                console.log('Only ' + maxQty + ' unit(s) available!');
                return false; 
            } 
        }); 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="maxQtyclass" data-qty="8"/>

因为,它正在进行字符串比较,因此"12">"8"失败。尝试转换为 int 并按如下所示进行比较。

$(".maxQtyclass").keyup(function () { 
        var maxQty = $(this).attr('data-qty');
        //lets say it is 8
        if (parseInt($(this).val()) > parseInt(maxQty)
            && e.keyCode != 46 // delete
            && e.keyCode != 8 // backspace
            ) { 
            $(this).val(maxQty);
            alert('Only ' + maxQty + ' unit(s) available!');
            return false; 
        } 
    });
您应该将

输入文本解析为数字。在您的方案中,您将字符串数据类型中的"12">"8"进行比较,并且由于字符串中的 12 以 1 开头,字符串中的 1 小于 8,因此条件返回 false。像这样更改代码:

$(".maxQtyclass").keyup(function () { 
    var maxQty = parseInt($(this).attr('data-qty'));
    //lets say it is 8
    if (parseInt($(this).val()) > maxQty
        && e.keyCode != 46 // delete
        && e.keyCode != 8 // backspace
    ) { 
        $(this).val(maxQty);
        alert('Only ' + maxQty + ' unit(s) available!');
        return false; 
    } 
});

确保所有数字都是整数。

相关内容

  • 没有找到相关文章

最新更新