javascript - 计算按键事件(或仅在按键事件中的数字)

标签 javascript jquery

我尝试计算折扣并只允许折扣字段中的数字。当我使用 keyup 事件时,计算是正确的,但我仍然可以输入任何字符,如果我使用 keypress 事件,对字符的限制有效但计算不再有效(不记录第一个输入)。

这是我的代码的代码笔:http://codepen.io/mbrillaud/pen/jEzBGy?editors=101

$(document).ready(function(){
    var $discount = $('#discount'),
        $price = $('#price'),
        $newPrice = $('#new-price');


    $discount.on('keypress', function(e) {
        if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)){
            return false;
        }
    $newPrice.val(
        Math.round(
            ($price.val() - (($discount.val() / 100) * $price.val()))* 100) / 100
        );
    });
});

我使用了 stackoverflow 的答案来检查数字。

预先感谢您的帮助

最佳答案

您可以结合使用 keypresskeyup 事件来实现此目的。使用 keypress 来防止不需要的字符,并使用 keyup 进行实际计算。

您还必须使用 e.stopImmediatePropagation() 来确保即使输入了无效字符,keyup 也不会继续计算:

$discount.on('keypress', function(e)
{
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)){
        e.stopImmediatePropagation();
        return false;
    }
}
.on('keyup change', function(e)
{
    $newPrice.val(Math.round(($price.val() - (this.value / 100) * $price.val()))* 100) / 100);
});

我也冒昧地 Hook 了一个change事件,所以当你删除字符时总数会更新(使用backspacedelete 键)也是如此。

查看更新 Codepen

关于javascript - 计算按键事件(或仅在按键事件中的数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28588597/

相关文章:

javascript - 在 React 中创建滚动位置指示器

javascript - 停止将更改传播到同一对象的多个实例

javascript - 屏幕截图中没有出现突出显示元素?请

javascript - Zepto 中的绑定(bind)事件

jQuery UI - 页面加载样式延迟

javascript - HTML 自动幻灯片

javascript - $.each 在 Firefox 中引发错误(e 未定义),但在 Chrome 中工作正常

javascript - 基本的 HTML5 IDE

php - 在删除数据库中的行之前显示确认对话框

javascript - 使用 Wordpress 和 Waypoints 使左侧图像变粘,而右侧滚动