2012-03-29 36 views
1

我試圖在用戶單擊按鈕時連續將+1添加到文本輸入字段的值。每0.2秒運行mousedown事件,直到鼠標上移

,簡體中文,我的jQuery代碼是這樣的:

$('#button').on({ 
mousedown : function() { 
var value = $(this).val(); 
$(this).val(value + 1); 
}, 
mouseup : function() { 
//Some other stuff here 
} 
}); 

這工作在用戶每次點擊該按鈕。 我想要的是,如果用戶保持按鈕按下,mousedown事件每隔0.2秒觸發,直到他停止按下(並且比mouseup事件觸發)。

我想這應該用setTimeout()完成,但如果有人告訴我如何,我會很高興。謝謝。

+1

每0.2ms,現在速度很快! – jbabey 2012-03-29 13:16:37

回答

9

使用setIntervalclearInterval

var interval; 
$('#button').on({ 
    mousedown : function() { 
    var el = $(this); 
    el.val(parseInt(el.val(), 10) + 1); 
    interval = window.setInterval(function(){ 
     el.val(parseInt(el.val(), 10) + 1); 
    }, 200); 
    }, 
    mouseup : function() { 
    window.clearInterval(interval); 
    } 
}); 

然而,這是不可能的週期通常爲0.2 ms的運行,我想你的意思是每0.2數秒

+0

其實你的解決方案比我的好...; -P – 2012-03-29 13:13:24

+0

我喜歡這個,如果有效的話我會upvote ..張力 – MaxwellLynn 2017-06-29 11:15:29

2

您可以使用setInterval來重複事件鼠標按下代碼之後

var int = null; 
$("#button").mousedown(function() { 
    // Start the timer on mousedown 
    int = setInterval(function() { 
    $("#button").val($("#button").val() + 1); 
    }, 2); 
}).mouseup(function() { 
    // Stop the timer after mouse up 
    clearInterval(int); 
    int = null; 
    // Other code 
}); 
1

可以這樣實現這一點:

$('#button').on({ 
    mousedown: function() { 
     $(this).data('clicked', true); 
     var self = this; 
     var process = function() { 
      if ($(self).data('clicked')) { 
       console.log("process..."); 
       setTimeout(process, 200); 
      } 
     }; 
     process(); 
    }, 
    mouseup: function() { 
     $(this).data('clicked', false); 
    } 
}); 
相關問題