3

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

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

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

3 回答 3

10

不,您不能这样做,因为 onclick 处理程序用于eval()评估 javascript 表达式并eval()期望MyFunction()成为全局函数,并且当它在.ready()处理程序内部定义时,它不是全局函数,因此eval()找不到它。

您可以通过在 ready() 处理程序中定义 MyFunction 使其成为一个全局函数,如下所示:

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

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

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

$(document).ready(function() {
    $("#myLink").click(function() {
        alert("Hello");
    });
});
于 2012-04-10T06:20:01.843 回答
1

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

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

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

<a href="#" onclick="example();">Example</a>
于 2012-04-10T06:20:29.790 回答
0

如果您试图将代码保持在全局范围之外,则可以执行以下操作:

var myApp = {

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

};


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

但是,您将无法调用匿名函数中定义的任何函数,因为它们都超出范围且不可访问。

所以简而言之,如果该函数在 document.ready 中定义,则不能从 document.ready 外部调用该函数。

于 2012-04-10T06:23:22.227 回答