使用:
<div onclick="UpdateAttributes();">Update</div>
<script>
function UpdateAttributes() {
alert(1);
}
<script>
不起作用: (未定义UpdateAttributes)
<div onclick="UpdateAttributes();">Update</div>
<script>
$(function(){
function UpdateAttributes() {
alert(1);
}
});
<script>
为什么会发生这种情况?我认为好旧的onload总是最安全的声明?
谢谢!
答案 0 :(得分:3)
在第二个示例中,UpdateAttributes
仅对ready
回调函数的闭包可见。
它在第一个工作,因为该功能是全局可见的。对于第二个示例,要使其正常工作,您可以将其修改为
$(function(){
$('div').click(UpdateAttributes);
function UpdateAttributes() {
alert(1);
}
});
因为UpdateAttributes
将在回调本身中可见。
另外,删除onclick
本身的内联div
处理程序。
答案 1 :(得分:2)
因为在第二个例子中,你在另一个函数中声明了这个函数。
在javascript中,函数表示本地范围,并且在范围退出时将销毁在该范围内创建的任何内容,除非您通过返回或以其他方式显式公开它。
AmmarCSE展示了另一种通过将函数分配给事件处理程序来显式公开函数的方法。
在您的示例中,您将其指定为字符串,并且仅绑定到全局函数。
另一种方法是使用window [“UpdateAttributes”] = UpdateAttributes;在函数内部,但这是一个粗糙而丑陋的解决方案;)