Bootstrap数字输入微调器不会停止旋转

时间:2017-05-06 18:23:42

标签: javascript twitter-bootstrap spinner

Demo on Bootsnipp

问题:

如果您左键单击+或 - ,则右键单击,将鼠标移开+或 - 按钮,然后放开两次单击," mouseup"功能永远不会触发,它会不断添加或减少数字,你就无法阻止它。

思想?

提前致谢!

2 个答案:

答案 0 :(得分:1)

以下代码中的解释:

$(function() {
    var action;
    $(".number-spinner button").mousedown(function () {
        btn = $(this);
        input = btn.closest('.number-spinner').find('input');
        btn.closest('.number-spinner').find('button').prop("disabled", false);
        // You're creating a new interval on every mousedown (left and right click)
        // You need to clear the previous interval to make this work.
        clearInterval(action);
        if (btn.attr('data-dir') == 'up') {
            action = setInterval(function(){
                if ( input.attr('max') === undefined || parseInt(input.val()) < parseInt(input.attr('max')) ) {
                    input.val(parseInt(input.val())+1);
                }else{
                    btn.prop("disabled", true);
                    clearInterval(action);
                }
            }, 50);
        } else {
            action = setInterval(function(){
                if ( input.attr('min') === undefined || parseInt(input.val()) > parseInt(input.attr('min')) ) {
                    input.val(parseInt(input.val())-1);
                }else{
                    btn.prop("disabled", true);
                    clearInterval(action);
                }
            }, 50);
        }
    }).mouseup(function(){
        clearInterval(action);
    }).mouseout(() => {
        // Added to stop spinning when mouse leaves the button
        clearInterval(action);
    });
});

<强>小结

  1. 清除mousedown上的上一个时间间隔。
  2. 同时清除mouseout上的间隔。

答案 1 :(得分:0)

mouseup事件只会在释放鼠标按钮时鼠标悬停在该元素上时触发一个元素。

您可以将处理程序添加到document,然后从那里委托给子控件。

或者可以为mouseout添加另一个处理程序并清除该事件的间隔。