0

我将一个函数注册到一个带有 onclick 属性的按钮,并在 $() 块中定义了这个函数(我知道这是一个不好的做法,这只是一个例子),当我点击按钮时,出现错误:未捕获的 ReferenceError:你好没有定义。这是我的代码:

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
$(function(){
    function hello(){
        alert('hello');
    }
});
</script>
</head>
<body>
<input type="button" id="btn" value="click" onclick="hello()"/>
</body>

如果我把 hello 函数代码放在 $() 块之外,它就可以工作。我知道在解析DOM的时候会执行$(),当我点击按钮时,DOM肯定已经被解析过了,为什么会报错呢?谢谢。

4

2 回答 2

2

您的代码假定 hello 是一个全局函数,但它不是。

$(function(){
    function hello(){
        alert('hello');
    }
    $("#btn").click(hello);
});
于 2013-03-18T13:30:47.963 回答
1

没有区别,除了在块内执行(未定义)的函数$.ready保证在 DOM 准备好被访问/操作之后执行。

您的问题是范围界定之一;您创建了一个在处理事件的全局范围内无法访问的本地函数。

于 2013-03-18T13:30:36.437 回答