2012-04-10 12 views
3

"onclick"イベントを使用してdocument.ready(function(){})で関数を呼び出すことはできますか?document.readyの呼び出し関数

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

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

答えて

10

ないのonclickハンドラは、JavaScript式を評価するためにeval()を使用し、eval()MyFunction()はグローバル関数であることを期待し、それが.ready()ハンドラ内で定義されている場合、それはそうグローバル関数ではありませんbecuase、あなたはそれを行うことはできませんeval()が見つかりません。

あなたはMyFunctionのは、このような準備ができて()ハンドラで定義することによって、グローバル関数も加えることができます。

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

しかし、それだけでイベントハンドラを指定するjQueryのイベントハンドラを使用していない方が良いでしょうHTML。

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

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

jQueryのイベントハンドラをHTMLに入れないでください。これはきれいで、はるかにエレガントです。 – jmort253

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の外から関数を呼び出すことはできません。

関連する問題