2017-01-13 19 views
4

この単純な関数は機能しません。エラー単純なJquery関数が機能していません

'myfunc関数' は、次の上映は、それはスコープの問題だ

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script> 
 
    $(document).ready(function(){ 
 
    function myfunc(){ 
 
     alert('In'); 
 
    } 
 
    }) 
 
</script> 
 
<button type="button" onclick="myfunc()">Alert</button>

答えて

6

を定義されていない、myfunc関数はグローバルスコープではありません。 $(document).ready()の中に入れると、document.ready()コールバック内でのみ呼び出すことができます。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
    //this doesn't need to be in document.ready(), it won't get called until button is already loaded anyway 
    function myfunc() { 
    alert('In'); 
    } 
</script> 
<button type="button" onclick="myfunc()">Alert</button> 

あなたは、ドキュメントの準備ができるまでは、関数を作成して待つため、問題が存在するスコープがhttp://www.w3schools.com/js/js_scope.asp

+0

迅速な対応とわかりやすい説明をいただきありがとうございます。 :) –

0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> $(document).ready(function(){ 
function myfunc(){ 
    alert('In'); 
} });/*don't forget ;*/ 
</script> <button type="button" onclick="myfunc()">Alert</button> 
2

でJSどのように機能するかについての詳細を読むことができます。すべてのDOM要素がロードされると、ドキュメントは準備が整います。したがって、関数が作成される前に、ボタンをロードする必要があります。

ボタンはロードしようとしましたが、機能を見つけることができません。これはまだ作成されていないためです。 document.ready()の外の関数を置き換えて、DOM要素がロードされる前に関数が作成されるようにする必要があります。

0

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script> 
 
    function myfunc(){ 
 
     alert('In'); 
 
    } 
 
    $(document).ready(function(){ 
 
    
 
    }) 
 
</script> 
 
<button type="button" onclick="myfunc();">Alert</button>

+0

あなたの関数を '$(document).ready'の外に書く – Mubin

1

$(document).ready(function() { 
 
    $("#btn").click(function() { 
 
    alert('Button Clicked') 
 
    }) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button type="button" id="btn">Alert</button>

次のようなボタンにイベントを添付することができます。それからちょうど何かを警告してください

0

これはJavaScriptの基本的な問題です。あなたの関数myfuncは、名前のない "onload" jquery関数に対してはプライベートです。一般的に言えば

- あなたはまだ「のonload」関数の内部で、あなたの関数を定義したいと仮定 - あなたはこのようにそれを行うことができます(a()「onloadイベント」機能とb()があなたのmyfunc()です):

var b; // without this line it would still work, since 
     // b would implicitely become a global variable in a() 
function a(){ 
    // function b(){ ... would *not* work here 
    b=function(){ 
     alert('In'); 
    } 
} 
a(); 
b(); 

実際の問題に戻る:@guradioによって提供されるソリューションは、確かにjqueryを使用する方法で使用するための最善の方法です。

関連する問題