javascript - jQuery : How to prevent insertion into input field after sum of multiple input fields has been reached?

标签 javascript jquery

在通过 Google 和 stackoverflow 搜索后,我成功地得出了这段代码,但是,只有一个问题

假设 amount_available125 。正确地说,我应该只能输入总和为 < 125 的数字。但我可以输入一位数更多的数字,例如 1111或大于 125 的 3 位数字喜欢 999 。我该如何纠正这个问题?除此之外,它工作得很好。

下面是我的代码:

<小时/>

JQuery

var amount_available = $('input[name=amount_available]').val();
$(".multiple_spec").on('keydown','input[name*=quantity]',function(e){
    var total_quantity=0;
    $(this).parents('[class*=multiple]').find('input[name*=quantity]').each(function(){
        var val = parseFloat($(this).val());
        if(isNaN(val))val = 0;
        total_quantity=(val+total_quantity);
    });
    if(total_quantity>amount_available){
        // Allow: backspace, delete, tab, escape, and enter
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||
            // Allow: Ctrl+A
            (e.keyCode == 65 && e.ctrlKey === true) ||
            // Allow: home, end, left, right
            (e.keyCode >= 35 && e.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        }
        e.preventDefault();
    }
});

HTML

<input type="text" name="amount_available"/>
<div class="multiple_spec">
    <div class="some_class">
        <input type="text" name="quantity1"/>
        <input type="text" name="quantity2"/>
        <input type="text" name="quantity3"/>
    </div>
</div
<div class="multiple_price">
    <div class="random_class">
        <input type="text" name="quantity4"/>
        <input type="text" name="quantity5"/>
        <input type="text" name="quantity6"/>
    </div>
</div

最佳答案

您需要在 keyup 事件而不是 keydown 中进行验证,因为您无法访问其中的最新值。

像这样怎么样:

var $quantityInputs = $(".multiple_spec input[name*=quantity]");

$quantityInputs.on('keyup',function(e){

    var amount_available = +$('input.amount_available').val(),
        // Extract values from quantity input fields:
        total_quantity = $quantityInputs.map(function(i, el){ 
            return +$(el).val() || 0;
        // Add them all together:
        }).get().reduce(function(prev, curr){
            return prev + curr;
        }, 0);

    if(total_quantity > amount_available){
        console.log('total quantity exceeds available amount - do something');
        $(this).val(function(index,value){
            return value.substr(0,value.length-1);
        });
    }
});

http://jsfiddle.net/rwrLt4cm/6/

关于javascript - jQuery : How to prevent insertion into input field after sum of multiple input fields has been reached?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443354/

相关文章:

javascript - FadeOut 元素到 FadeIn 另一个与 CSS 动画相同的地方

javascript - AngularJS 无限滚动,不只适用于 chrome 全屏

javascript - 尽管选择器相同,jQuery 仍运行一次单击功能

javascript - jQuery Colorbox 插件不加载图像

javascript - 缓出计数器

javascript - scrollTop 为 firefox 中的 div 返回更小的值

javascript - 在 RoR 应用程序(c9 IDE)中看不到 JQuery 效果

javascript - div 类(index.php)看不到 css 文件夹

javascript - 当我将 ASP .NET 投诉字典发送到服务器时,contentType 应该是什么

javascript - Node JS ctrl + C 不会停止服务器(使用 "npm start"启动服务器后)