3

我有带有链接的 html 页面,我想在其中将函数附加到他们的 onclick 事件。一种方法当然是:

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

但我知道这不是最佳做法。因此,我等待window.onload,遍历链接并将保存功能附加到带有rel =“save”的链接。这样做的问题是它会等到整个页面完成加载,这可能是链接显示和可点击后的几秒钟。

那么还有其他方法可以做到这一点吗?避免在 html 中点击 onclick,但这使得它在呈现链接时立即工作。

4

6 回答 6

3

Internet Explorer 为 <script> 标记提供了一个方便的属性,称为defer。它用于延迟脚本的解析,直到文档完成加载。对于支持它的其他浏览器,您可以使用 DOMContentLoaded,正如其他人所建议的那样,对于不支持这两种浏览器的浏览器,您可以回退到 onload。

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

我在 Google 上快速搜索了“DOMContentLoaded defer”,发现以下页面可能会有所帮助:

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

于 2009-07-20T14:40:35.073 回答
1

您可以尝试DOMContentLoadedevent 而不是load. IE 还为脚本标签提供了 defer 属性,该属性会延迟执行,直到加载 DOM。据我所知,如果这些对你不起作用,那么你就会被你提到的解决方案所困扰。

于 2009-07-20T14:20:57.630 回答
1

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

于 2009-07-20T14:24:06.923 回答
0

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

这样,如果未加载 Javascript,链接仍然会执行某些操作。这是一个链接,所以它会将用户引导到另一条内容?- 这应该在没有 Javascript 的情况下工作。如果附加到链接的功能只能Javascript 一起使用,您应该使用 Javascript 创建并将它们插入到 DOM 中(如果它们不存在,则它们是不可点击的......)。

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

编辑:哦,“保存”听起来很像它应该是表单中的按钮而不是链接。不过,Unobtrusive JS 的东西仍然适用。

于 2009-07-20T15:11:36.533 回答
0

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

顺便说一句,这几乎肯定不是最佳实践,有些人可能会将其标记为最差实践。

于 2009-07-20T14:24:33.147 回答
0

这个怎么样?

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

注意:此解决方案要求用户启用 Javascript。不完全是最佳实践,但可能适合您的场景。

于 2009-07-20T14:45:46.280 回答