0

関数の外側で javascript var を宣言すると、必要に応じてその関数内で使用できるようになると常に考えていました。

以下のコードに問題があります。get_value 関数をトリガーするボタンをクリックすると、コンソールは tween 変数が未定義であると通知します。

    <script>
        $(document).ready(function() 
        {
            var timeout_val = 0;

            var stage = new Kinetic.Stage({
                container: 'stage',
                width: 940,
                height: 50
            });
            var layer = new Kinetic.Layer();

            var line = new Kinetic.Line({
                points: [10, 10, 100, 10],
                stroke: '#FF0000'
            });

            layer.add(line);
            stage.add(layer);

            var xTo = stage.getWidth() - 10;

            var tween = new Kinetic.Tween({
                node: line,
                duration: 5,
                points: [10, 10, xTo, 10]
            });
        });

        function get_value(){
            $.ajax({
                type: "GET",
                url: "players.php",
                data: {}
            }).done(function( result ) {
                if (result != "Timeout Error") {
                    $("#players").html(result);
                }
                $("table").tablesorter({widgets: ["zebra"], sortList: [[1,1], [0,0]]});
                timeout_val = window.setTimeout(get_value, 5000);
            });
            tween.reset();
            tween.play();
        }
    </script>

違いがある場合、このスクリプト ブロックは私のページの頭の中にあります。

次に、このように記述された単純な入力ボタンを使用して get_value 関数を呼び出します。

<input type="button" name="submit" id="submit" value="submit" onClick = "get_value();" />

なぜこれが機能しないのか途方に暮れています。教えていただければ幸いです

クローズさんありがとう

4

1 に答える 1

1

tweenへの呼び出しで使用されるインライン関数内で定義されます$(document).ready。したがって、 の対象外ですget_value

get_value同じreadyハンドラー内から定義した場合、その変数が表示されます。または、ハンドラーtweenの外に移動してreadyグローバルにした場合、そのハンドラーも表示されます。今のように、それは完全に別のスコープにあります。

于 2013-10-23T19:21:32.643 に答える