我可以使用“onclick”事件调用document.ready(function(){})中的函数吗?
document.ready(function(){
function MyFunction()
{
alert("Hello");
}
});
<a href="#" onclick="javascript:MyFunction()"></a>
答案 0 :(得分:10)
不,你不能这样做,因为onclick处理程序使用eval()
来评估javascript表达式,eval()
期望MyFunction()
成为一个全局函数,并且在.ready()
内定义它1}} handler,它不是一个全局函数,因此eval()
找不到它。
你可以通过在ready()处理程序中定义它来使MyFunction成为一个全局函数,如下所示:
window.MyFunction = function() {...}
但是,最好只使用jQuery的事件处理程序,而不是在HTML中指定事件处理程序。
<a id="myLink" href="#">Click Me</a>
$(document).ready(function() {
$("#myLink").click(function() {
alert("Hello");
});
});
答案 1 :(得分:1)
“javascript:”是不必要的。是的,你可以。只要您在可访问的范围(换句话说,全局范围)中定义它。
function example() { console.log("Called!"); }
$(document).ready(function() { /* code */ example(); /* code */ });
<a href="#" onclick="example();">Example</a>
答案 2 :(得分:0)
如果您试图将代码保留在全局范围之外,可以执行以下操作:
var myApp = {
myFunction: function() {
alert("Hello");
}
};
$(document).ready(function() {
myApp.myFunction();
});
但是,您将无法调用匿名函数中定义的任何函数,因为它们都超出范围且无法访问。
简而言之,如果在document.ready中定义了该函数,则无法从document.ready之外调用函数。