2012-04-10 105 views
3

我可以使用“onclick”事件调用document.ready(function(){})中的函数...?document.ready中的调用函数

 document.ready(function(){ 
     function MyFunction() 
       { 
        alert("Hello"); 
       } 
       }); 

<a href="#" onclick="javascript:MyFunction()"></a> 

回答

10

没有,监守的onclick处理程序使用eval()评估JavaScript表达式和eval()预计MyFunction()是一个全球性的功能,当它在.ready()处理程序中定义的,它不是一个全球性的功能,所以你不能这样做eval()找不到它。

您可以MyFunction的是一个全球性的功能,通过在准备()处理其定义是这样的:

window.MyFunction = function() {...} 

但是,这将是最好只使用jQuery的事件处理程序,而不是指定的事件处理程序HTML。

<a id="myLink" href="#">Click Me</a> 

$(document).ready(function() { 
    $("#myLink").click(function() { 
     alert("Hello"); 
    }); 
}); 
+0

+1因为它更好地使用jQuery的事件处理程序,而不是将其放入HTML中。这是更清洁,更优雅。 – jmort253 2012-04-10 06:24:24

1

“javascript:”是不必要的。是的,你可以。只要你在一个可访问的范围内定义它(换句话说,就是全局范围)。

function example() { console.log("Called!"); } 

$(document).ready(function() { /* code */ example(); /* code */ }); 

<a href="#" onclick="example();">Example</a> 
0

如果你想保持你的代码了全球范围内的,你可以做这样的事情:

var myApp = { 

    myFunction: function() { 
     alert("Hello"); 
    } 

}; 


$(document).ready(function() { 
    myApp.myFunction(); 
}); 

但是,您将无法调用内部的匿名定义的任何功能因为它们都超出了范围并且无法访问。

因此,简而言之,如果该函数是在document.ready内定义的,则不能从document.ready之外调用函数。

相关问题