我知道这是不好的做法。尽可能不要编写这样的代码。
当然,我们总是会发现自己的内联Javascript代码段可以快速解决问题。
我追求此查询的目的是充分了解编写类似以下内容时会发生什么(以及潜在的陷阱):
<a href="#" onclick="alert('Hi')">Click Me</a>
据我所知,这在功能上与
<script type="text/javascript">
$(function(){ // I use jQuery in this example
document.getElementById('click_me').onclick =
function () { alert('Hi'); };
});
</script>
<a href="#" id="click_me">Click Me</a>
由此推断,似乎已将分配给属性的字符串onclick
插入到一个匿名函数中,该匿名函数已分配给元素的单击处理程序。确实是这样吗?
因为我开始做这样的事情:
<a href="#" onclick="$(this).next().fadeIn(); return false;">Display my next sibling</a> <!-- Return false in handler so as not to scroll to top of page! -->
哪个有效。但是我不知道这是多少黑客。它看起来很可疑,因为没有明显的函数要从中返回!
您可能会问,为什么要这样做,史蒂夫?内联JS是不好的做法!
老实说,我只是为了修改页面的一个部分而厌倦了编辑代码的三个不同部分,尤其是当我只是对某个东西进行原型设计以查看它是否可以工作时。在此元素内定义与此HTML元素特别相关的代码非常容易,有时甚至很有意义:当我在两分钟后决定这是一个可怕的想法时,我可以对整个div进行核对(或其他任何方法) ),并且在页面的其余部分中没有一堆神秘的JS和CSS碎片,从而使渲染速度稍有降低。这类似于引用局部性的概念,但我们要关注的是错误和代码膨胀,而不是缓存未命中。
#click_me
在DOMready事件上挂钩查询,或将脚本放在节点之后。
document.getElementById("click_me").onclick;
。或提醒它。您会看到它在一个函数中。