比使用document.onload更快地启动onclick

时间:2009-07-20 14:15:58

标签: javascript javascript-events event-handling

我有带有链接的html页面,我想将一个函数附加到他们的onclick-event。一种方法当然是:

<a href="save.php" onclick="save(); return false;" rel="save">Save</a>

但我知道这不是最好的做法。所以我等待window.onload,循环链接并将save-function附加到rel =“save”的链接。这个问题是它等待整个页面完成加载,这可能是链接显示和可点击后几秒钟。

还有另一种方法吗?避免在html中进行onclick,但这会在呈现链接时立即生效。

6 个答案:

答案 0 :(得分:3)

Internet Explorer具有&lt; script&gt;的便捷属性标记为defer。这是为了延迟解析脚本直到文档加载完毕。对于支持它的其他浏览器,您可以像其他人建议的那样使用DOMContentLoaded,对于不支持的浏览器,您可以回退到onload。

<script type="text/javascript" defer>
//- Run this code when the DOM parsing has completed
</script>

我快速搜索了“DOMContentLoaded defer”,并找到了以下可能有用的页面:

http://tanny.ica.com/ica/tko/tkoblog.nsf/dx/domcontentloaded-event-for-browsers

答案 1 :(得分:1)

您可以尝试DOMContentLoaded事件而不是load。 IE还为脚本标记提供了延迟属性,这会延迟执行,直到加载DOM。如果这些不适合你,那么就你所知,你会坚持使用你提到的解决方案。

答案 2 :(得分:1)

在你的情况下,你可以保持原样。坚持最简单的事情,即使它不是一般的最佳实践。

答案 3 :(得分:0)

我不知道这是否适合您的解决方案,但您可以在is下面插入脚本,并在其中添加您需要更改的链接。此脚本不会包含在函数中,允许浏览器在看到时立即执行它。结果是,您可以在加载整个页面之前运行脚本,仅更改正在运行的脚本上方的项目。 (如果您在脚本下方引用某些内容,则会失败。)

顺便说一下,这几乎肯定不是最佳做法,有些人可能会认为这是最糟糕的做法。

答案 4 :(得分:0)

这个怎么样?

<a href="javascript:void(save());">Save</a>

注意:此解决方案要求用户启用Javascript。不完全是最佳做法,但可能适合您的情况。

答案 5 :(得分:0)

这里的理想是使用Unobtrusive Javascript的想法。

通过这种方式,如果未加载Javascript,链接仍会执行某些操作。它是一个正确的链接,因此它引导用户访问另一段内容? - 这应该没有Javascript工作。 如果附加到链接的功能只能与 Javascript一起使用,您应该使用Javascript 创建并插入到DOM中(如果它们不存在则不可点击它们...)。

(否则如何将click事件委托给包装元素?在元素完成之前是否有效?)

编辑:哦,“保存”听起来非常像它应该是一个表单而不是链接的按钮。不引人注目的JS东西仍然适用。