2012-01-23 26 views
1

This question's answers建議使用window.setInterval作爲立即檢測(不等待模糊)的唯一可靠方法,如果文本框的內容發生更改,因爲某些文本框更改可能通過事件發生除了按鍵。電池友好的方式來檢測文本框的內容是否已更改

即使我的臺式電腦上我看到IE或Firefox嚼了CPU的不平凡的百分比有500毫秒的setInterval用比較簡單的處理程序檢查了幾個文本框運行。這在臺式電腦上可行,但在筆記本電腦和手機上會損害電池壽命。

使用jquery最大限度地減少CPU利用率,但仍提供快速更新以響應更改(包括剪貼板粘貼,ajax更新等,而不僅僅是按鍵)到文本框?

回答

4

onBlur是當你從一個物體移開而不必改變它。

onChange你已經從你已經改變的值的對象,離開後才能調用。

其中一個應符合您的需求。如果不是,則每個字符更改都會觸發各種按鍵事件。

如果這些不那麼定期更新一個JavaScript變量不可能採取儘可能多的處理能力,你是說,除非你的選擇是造成一些奇怪的DOM的行爲。

試試這個:通過id引用元素,並將該引用存儲在js變量中。然後通過這個引用更新和更改另一個變量是一個簡單的操作。

+0

我實現了你的建議,並發現了主要的CPU問題:一個導致重複設置元素的text()的比較錯誤。即使文本與舊文本相同,它也會佔用一個CPU內核的50%來更新它。現在IE9下降到<1%。但Firefox仍然只需要使用最簡單的選擇器從DOM讀取2%-3%(並將它們緩存到js變量中)。我需要進一步降低含義,我也需要@andi的建議。我贊同你的兩個答案。希望我也能接受他們兩個! –

2

開始運行在該文本框的聚焦,window.setInterval(或setTimeout的)檢查,並殺死它模糊。這樣,當光標不在文本框中時,您不會佔用CPU電源。

+0

雖然這可行,但我不能想象爲什麼這個操作會花費任何可測量的時間,除非有一個不好的選擇器,所以我不推薦它。 – mvrak

+0

我同意,首先這個操作並沒有那麼糟糕。我只是回答這個傢伙的問題......對微小問題的微小改進。 =) – andi

相關問題