2011-11-25 34 views
0

頁面有一個文本框,當用戶關注它時,我想每兩秒鐘計算一次它的值。如果用戶模糊文本框,我想停止這個計算。當文本框專注於jquery時,每2秒進行一次計算

假設只有float值可以由用戶輸入。我嘗試了一些東西,但它不起作用。

http://jsfiddle.net/TUNm4/1/

增加原代碼,因此,如果小提琴被刪除,我們仍然可以看到的問題是:

$(function() { 
    var newValue = ""; 
    var makeCalculation = function(var1) { 
     newValue = var1 * 0.05; 
    }; 

    $("#textBox").focus(function() { 
     (function() { 
      makeCalculation(parseFloat($(this.val()))) 
      setTimeout(arguments.callee, 2000); 
     }); 
    }); 
}); 
+0

你的邏輯中有什麼具體的原因,爲什麼這個計算必須每2秒完成一次?這將會更有意義(並且表現更好)才能在按鍵/更改事件中運行它。 –

回答

1

檢查此琴:http://jsfiddle.net/TUNm4/6/

$(function() { 

    var newValue = ""; 
    var makeCalculation = function(_this) { 
     newValue = parseFloat($(_this).val()) * 0.05; 
     $("div").html(newValue); 
    }; 

    $("#textBox").focus(function(){ 
     makeCalculation(this); 
     var _this = this; 
     $(this).data("interval", setInterval(function(){ 
      makeCalculation(_this); 
     }, 2000)); 
    }) 
    .blur(function(){ 
     clearInterval($(this).data("interval") ); 
    }); 

}); 

還可以做什麼,是的onkeyup,那麼你就總能得到最新的計算,你不需要超時:

$(function() { 
    var newValue = "";  
    $("#textBox").bind("keyup change mouseup", function() { 
     newValue = parseFloat($(this).val()) * 0.05; 
     $("div").html(newValue); 
    }); 
}); 
+0

僅使用鍵控是不夠的,因爲用戶可能會用鼠標粘貼文本。也應該抓住「變化」和「鼠標移動」。 – idanzalz

+0

謝謝你改變了! – Niels

1

簡單。

$(function() { 
    var timer_id; 
    $('#textBox').focus(function() { 
     var $this = $(this) 
     timer_id = setInterval(function() { calcValue($this.val()) }, 2000) 
    }).blur(function() { 
     clearInterval(timer_id) 
    }) 
} 

順便說一句,你做什麼的問題是你從來沒有調用你定義的匿名函數。 (2),你不應該在這裏使用計時器,而只是對「keyup」,「change」和「mouseup」的jquery事件作出反應,他們應該給你所有可能發生的變化。定時器消耗更多資源,不會立即作出反應。像:

$(function() { 
    $('#textBox').bind('change keyup mouseup', function() { 
     calcValue($(this).val()) 
    }) 
} 
1

看看這個http://jsfiddle.net/lastrose/TUNm4/8/

$(function() { 
    var timer; 
    var makeCalculation = function(var1) { 
     return var1 * 0.05; 
    }; 

    $("#textBox").focus(function() { 
     var box = $(this);   
     timer = setInterval(function(){ 
      box.val(makeCalculation(box.val())); 
     }, 2000); 
    }).blur(function(){ 
     clearInterval(timer); 
    }); 

}); 

你想要做的是使用setInterval,以便每x秒該函數重複自身。和clearInterval來擺脫它。