2012-04-10 103 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之外調用函數。

相關問題