2010-02-09 61 views
8

我們擁有的代碼將在用戶空閒一段時間後運行。 (doStuff重置倒計時)JQuery的原型端口是否正確?

現有代碼原型:

Event.observe(window, 'mousemove', function() { doStuff(); }); 
Event.observe(window, 'scroll', function() { doStuff(); }); 
Event.observe(window, 'click', function() { doStuff(); }); 
Event.observe(window, 'focus', function() { doStuff(); }); 
Event.observe(window, 'blur', function() { doStuff(); }); 
Event.observe(window, 'keypress', function() { doStuff(); }); 

Event.observe(document, 'mousemove', function() { doStuff(); }); 
Event.observe(document, 'scroll', function() { doStuff(); }); 
Event.observe(document, 'click', function() { doStuff(); }); 
Event.observe(document, 'focus', function() { doStuff(); }); 
Event.observe(document, 'blur', function() { doStuff(); }); 
Event.observe(document, 'keypress', function() { doStuff(); }); 

我期待與這個jQuery來替代它:

$(document).ready(function() { 
    $(document).bind("mousemove scroll click focus blur keypress", doStuff); 
}); 

它檢查出來的時候我測試,但可以任何人都確認我不必進行文件/窗口檢查,或者我沒有忽視其他任何內容?謝謝。

+0

至於答案,我不知道,但如果你可以堆疊所有的綁定到一個'bind'命令......這真是太棒了:] – 2010-02-09 22:32:03

+0

是的,它似乎運行正常,這讓我很開心。 – blu 2010-02-09 22:33:12

+0

我注意到焦點和模糊不要確實調用函數時,我在表格周圍選項卡,不知道如果這甚至以舊的方式工作... – blu 2010-02-09 22:37:18

回答

15

關閉,這是一個完整的端口(添加window)和不需要的文件準備測試:

$([document, window]).bind("mousemove scroll click focus blur keypress", doStuff); 

你可以傳遞一個數組jQuery的功能,使自己爲自己設定了適用於超過一個項目。在這種情況下,您已經參考了windowdocument。這是你可以在一個電話中完成的方式。

但是,我不認爲所有原始的原型代碼都是需要的。例如,focusblur不適用於documentclick,mousemovekeypresswindow上不需要。

這可能是更多你想要什麼:

$(window).bind("focus blur scroll", doStuff); 
$(document).bind("click mousemove keypress scroll", doStuff); 

DOM就緒不需要:是不需要的DOM準備測試,因爲你已經有了documentwindow立即訪問。等待DOM準備就緒是不必要的。

+0

好吧,謝謝。 – blu 2010-02-09 22:35:33

+0

@blu剛剛更新了我的答案,更詳細一點。我意識到'$(document).ready'不是必需的。 – 2010-02-09 22:39:46

+0

感謝您的跟進。它工作,我喜歡它,問題關閉。 – blu 2010-02-09 22:43:39

1

原型代碼是......非最優的,至少可以說,而不是與原型相關的任何原因。

您的重寫看起來不錯,您已經丟棄了window。如果沒有鉤住window上的事件在jQuery中有效,那麼它在Prototype中有效。

在原型製作類似的假設(但包括window)類似的改寫:

$w('mousemove scroll click focus blur keypress').each(function(evtname) { 
    document.observe(evtname, doStuff); 
    Event.observe(window, evtname, doStuff); 
}); 

......我也不會驚訝地發現,即使是更詳細的比實際需要是。