0

我正在使用完全在 jQuery 中实现的渐进增强来开发网站。

例如,我正在动态添加 onclick 事件处理程序以锚定标签以使用 SoundManager “内联”播放链接的 MP3 文件,并通过 $(document).ready(function()) 弹出 Youtube 播放器的 Youtube 链接。

但是,如果用户在页面加载时单击它们,他们仍然会获得非增强版本。

我考虑过隐藏相关的东西(通过显示:无,或类似的东西)并在加载时显示它,或者放置一个模式“加载”对话框,但听起来都像黑客。

有更好的想法吗?我觉得我在这里遗漏了一些完全明显的东西。

问候,

亚历克斯

4

4 回答 4

4

这个我没测试过,你可以试试live。想法是您可以将单击处理程序放在 document.ready 之外,以便它们立即执行。由于live使用事件委托来实现其功能,因此您实际上不需要等待 DOM 准备好,并且在页面加载时进行的任何单击仍应由事件处理程序捕获。

如果这不起作用,您可以尝试将 Javascript 脚本标记直接放在需要绑定的任何内容下方。它不漂亮,但它几乎可以消除这个问题。

于 2009-06-03T21:09:44.307 回答
2

假设您使用了良好的判断力并且人们仅仅因为延迟太长而爱上了非增强版本,那么我会使用CSS 来禁用控件。CSS 几乎会立即加载。然后使用 Javascript 我将切换 CSS,以便重新启用控件。

但是,我的第一反应是,如果用户可以在页面加载时单击它,那么您的页面或连接太慢了。但是,如果这种情况很少发生——不到 1% 的时间——那么你可以不理会它,只要用户能够实现他的目标,那就是听他的音乐。我这样说是因为一旦用户意识到更好的体验等待半秒后,他通常会等待 Javascript 渲染然后点击。

于 2009-06-03T21:02:51.013 回答
1

关于使用 CSS,我与 aleemb 持相反的立场。如果您使用 css 禁用控件,那么禁用 javascript 或使用辅助功能软件的任何人都将无法使用这些控件,除非完全禁用您的样式表。

您可以在结束 body 标记之前使用非常小的内联 javascript 通过 js 非常快速地隐藏元素。如果它是内联的并且不需要加载外部资源,它会非常快,通常比用户点击要快。

但是,我确实同意 aleemb 的观点,如果您的用户能够在加载 js 之前对页面进行心理处理并使其成为他们想要单击的控件,那么您的页面加载方式可能存在更深层次的问题。寻找减少加载时间的方法:压缩图像文件、压缩 html/css/js 文件、缩小 javascript、将图像组合成 sprite 等。

于 2009-06-03T21:08:54.120 回答
0

我建议遵循Paolo Bergantino 的建议- 事件委托是完全避免该问题的方法。

我有一个类似的问题,事件委托无法完成这项工作 - 你可以在这里阅读

于 2009-06-03T21:56:43.120 回答