我知道这是不好的做法。如果可能的话,不要编写这样的代码。
当然,我们总是会发现自己处于这样一种情况: 一个聪明的内联 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的字符串似乎插入到分配给元素的 click 处理程序的匿名函数中。真的是这样吗?
因为我开始做这样的事了:
<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 元素定义为 就在心里元素是非常容易的,有时甚至是有意义的: 当我2分钟后决定这是一个非常非常糟糕的想法时,我可以把整个 div (或者其他什么东西)都删除掉,而且我不会在页面的其他部分留下一堆神秘的 JS 和 CSS 残渣,这会稍微减慢渲染的速度。这类似于访问局部性的概念,但是我们看到的不是缓存错误,而是 bug 和代码膨胀。