2016-10-12 4 views
1

jsファイル(およびjqueryライブラリファイル)に正しくリンクされたhtmlファイルがあります。 JSファイル内onclickイベントがjQuery関数を実行しない

<input type="button" onclick="practice();" id="intro_next_button" value="Practice"/> 

:それはそれの内部にあるとき

$(window).load(function(){ 
    function practice(){ 
     alert("WORKS"); 
    } 
});  

これは、関数の練習が$(window).load(function()の外にある場合は動作しますが、ありません。これには多くの同様の質問がありますが、具体的にはonclick eventについてのみ、jquery $(window).load(function()の内部では動作しないものは見つかりませんでした。

+0

ので。なぜそれがオンロードで定義されていますか?それを動かす。 – epascarello

+0

ああ、私はそれが動作することを確認するために、すべての関数をonload関数に入れる必要があるという印象を受けました。 –

+0

それはそうではありません – epascarello

答えて

2

ファンクションブロック内で定義されたもの(つまり、キーワードfunctionまたはvar)がそのブロックをそのスコープとして適用するため、これは機能しません。したがって、ブロック内に変数xを作成すると、そこには値がありません。

var x = 2; 
function test() { var x = 5; } 
console.log(x); 

プリント

これら2もスタイルが競合しています。通常、window.onloadまたは "改善された" jQuery $(document).readyを使用すると、関数の本体にイベントがバインドされます。

$("#intro_next_button").click(function() { alert("WORKS"); }); 
2

あなたがやっていることは、関数内でload()に渡された関数をパラメータとして定義することです。

onclickはウィンドウスコープ内でpractice()を探しています。

なぜページを読み込むときに関数を定義したいのですか?ユーザーがクリックできるように読み込まれるまで待つ?あなたの機能はあなただけはloadで定義されたanonimous関数内で表示されている。この場合、

$(window).load(function(){ 
    window.practice = function(){ 
    alert("WORKS"); 
    } 
}); 
+0

私はonclickの 'window.practice'関数をどう呼びますか?ウィンドウ内に何かを定義するとき、 'onclick =" practice() "'と 'onclick =" window.practice() "' –

+0

を試しました。 window.functionname()を呼び出す必要はありません。 基本的に、スコープなしで定義するすべてのものは、ウィンドウで定義されています。 :) このコードで試してください: function test(){}; console.log( 'what?'、window.test); –

1

: もしそうなら、これを試してみてください。あなたは(ともonclick属性を削除)load内jqueryのclickを使用してボタンにonclickイベントを添付する必要があります。機能はオンロードのブロック範囲内にあり、グローバルではありません

$('#buttonid').click(function(){practice();}); 
+0

私のものでなければ、われわれのハイブリッドもOKかもしれません: $(document).load(function(){ $( '#buttonid') ); –

関連する問題