$(".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;
}
});
确保所有数字都是整数。