2016-04-13 23 views
0

以下は私のコードです:コードの行は指定された時間後に実行されると思っていますが、タイムアウト前にそれらを実行します。指定されたsetTimeoutの前にコードが実行される

実行前に指定された時間待機する方法を教えてください。

var timeout; 
     $('body').on('input', '.set_price', function() { 
     if(timeout) { 
      clearTimeout(timeout); 
      timeout = null; 
     } 
     var dInput = this.value; 
     var id = $(this).attr("data-id"); 

     timeout = setTimeout(2000) 
     //after 2sec starts 
     $(this).attr("data-price",dInput); 
     shoppingCart.setPriceForItem(dInput,id); 
     displayCart(); 
     //after 2sec ends 
     }); 

私は無駄にこのようなタイムアウトのコールバックを作ってみました:

timeout = setTimeout(2000,funciton(){ 
      //after 2sec starts 
      $(this).attr("data-price",dInput); 
      shoppingCart.setPriceForItem(dInput,id); 
      displayCart(); 
      //after 2sec ends 
}); 

答えて

2

setTimeoutための正しいプロファイルがsetTimeout(function,milliseconds,param1,param2,...)です。あなたのコードでは、関数の前にミリ秒を入れます。これを試してみてください:

timeout = setTimeout(function(){ 
    //after 2sec starts 
    $(this).attr("data-price",dInput); 
    shoppingCart.setPriceForItem(dInput,id); 
    displayCart(); 
    //after 2sec ends 
}, 2000); 
+0

['setTimeout'](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) – Rayon

1

のsetTimeout()関数は次の形式を持っている

setTimeout(function(){ alert("Hello"); }, 3000); 

あなたのコード:

timeout = setTimeout(function(){ 
      //after 2sec starts 
      $(this).attr("data-price",dInput); 
      shoppingCart.setPriceForItem(dInput,id); 
      displayCart(); 
      //after 2sec ends 
},2000); 
1

これはどう?

$(this).attr("data-price",dInput); 
    shoppingCart.setPriceForItem(dInput,id); 
    setTimeout(function(){ displayCart(); }, 2000);