如果用户闲置了一段时间,我们会运行代码。 (doStuff重置倒计时)
原型中的现有代码:
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 :(得分:15)
关闭,这是一个完整的端口(添加window
),不需要文档就绪测试:
$([document, window]).bind("mousemove scroll click focus blur keypress", doStuff);
您可以将数组传递给jQuery函数,因此您设置的内容适用于多个项目。在这种情况下,您已经引用了window
和document
。这是你在一次通话中如何做到的。
但是,我不认为需要所有原始的Prototype代码。例如,focus
和blur
不适用于document
和click
,mousemove
和keypress
不需要{window
1}}。
这可能更符合您的要求:
$(window).bind("focus blur scroll", doStuff);
$(document).bind("click mousemove keypress scroll", doStuff);
DOM Ready not needed :不需要DOM就绪测试,因为您已经可以立即访问document
和window
。等待DOM准备就绪是不必要的。
答案 1 :(得分:1)
原型代码至少可以说是非最佳的,而不是与Prototype相关的任何原因。
除了放弃window
之外,你的重写看起来还不错。如果不挂钩window
上的事件在jQuery中有效,它在Prototype中有效。
Prototype中的类似重写做出了类似的假设(但包括window
):
$w('mousemove scroll click focus blur keypress').each(function(evtname) {
document.observe(evtname, doStuff);
Event.observe(window, evtname, doStuff);
});
......我发现即使这比实际需要的更冗长也不会感到惊讶。