2012-05-27 26 views
1

使用下面的代碼,當我點擊並按住bid-up按鈕時,它只會經過一次代碼,我必須再次單擊它才能工作。它應該做的是重複代碼,直到mouseup或mouseleave。我做錯了什麼?mousedown不工作

$('.bid-up').live('mousedown',function() { 

    var button = $(this); 
    timeoutId = setTimeout(function(){ 

     var number = button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(); 
     var newnumber = number.split('.'); 
     var on = button.attr('data-on'); 

     button.siblings('#bid-down').attr('data-on','1'); 

     if(newnumber[1]<9) { 
      var first = newnumber[0]; 
      var second = parseInt(newnumber[1])+1; 
     } 

     if(newnumber[1]==9) { 
      var first = parseInt(newnumber[0])+1; 
      var second = 0; 
     } 

     var finalnumber = first+'.'+second; 
     button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(finalnumber); 

    }, 20); 

}).bind('mouseup mouseleave', function() { 
    clearTimeout(timeoutId); 
}); 
+0

我認爲它會經過一次,因爲你使用'setTimeout' – wong2

+2

考慮存儲'。數據超時()'不是全局的變量:'button.data('timeout',setTimeout(...));'和'clearTimeout($(this).data('timeout'))' – ThiefMaster

回答

2

解決方案:使用setIntervalclearInterval,而不是超時,因爲setTimeout的只有一次執行的閉合功能,或在您的閉合功能setTimeout

在函數本身使用 setTimeout

示例:使用setIntervaldata存儲間隔ID

$('.bid-up').live('mousedown',function() { 

    var button = $(this); 


    function asd(){ 

     var number = button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(); 
     var newnumber = number.split('.'); 
     var on = button.attr('data-on'); 

     button.siblings('#bid-down').attr('data-on','1'); 

     if(newnumber[1]<9) { 
     var first = newnumber[0]; 
     var second = parseInt(newnumber[1])+1; 
     } 

     if(newnumber[1]==9) { 
     var first = parseInt(newnumber[0])+1; 
     var second = 0; 
     } 

     var finalnumber = first+'.'+second; 
     button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(finalnumber); 

     timeoutId = setTimeout(asd, 20); 
    } 

    timeoutId = setTimeout(asd, 20); 

}).bind('mouseup mouseleave', function() { 
    clearTimeout(timeoutId); 
}); 

例子。

$('.bid-up').live('mousedown',function() { 

    var button = $(this); 

    button.data('interval', setInterval(function(){ 

     var number = button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(); 
     var newnumber = number.split('.'); 
     var on = button.attr('data-on'); 

     button.siblings('#bid-down').attr('data-on','1'); 

     if(newnumber[1]<9) { 
     var first = newnumber[0]; 
     var second = parseInt(newnumber[1])+1; 
     } 

     if(newnumber[1]==9) { 
     var first = parseInt(newnumber[0])+1; 
     var second = 0; 
     } 

     var finalnumber = first+'.'+second; 
     button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(finalnumber); 
    }, 20)); 

}).bind('mouseup mouseleave', function() { 
    clearInterval(button.data('interval')); 
}); 
+0

感謝它的作品,但當我mouseup或mouseleave它doesn'不要停下來。它繼續前進?任何想法爲什麼? – user892134

+0

你使用了哪一個?還要考慮在.data()而不是全局變量中存儲超時值:'button.data('timeout',setTimeout(...));'和'clearTimeout($(this).data('timeout')) '我認爲你的'timeoutId'沒有在'mouseup mouseleave'上定義。 – 19greg96

+0

我使用了第二個 – user892134

1

試試這個: http://jsfiddle.net/R85Xb/

var timeoutId; 
function x() 
{ 
     $("#bids").append("x"); 
     timeoutId = setTimeout(x, 200); 
} 

$('.bid-up').live('mousedown', function() { 

    var button = $(this); 
    timeoutId = setTimeout(x, 200); 

}).bind('mouseup mouseleave', function() { 
    //alert('clear'); 
    clearTimeout(timeoutId); 
});​ 


<div class="bid-up">here</div> 
<div id="bids"></div>​