2011-09-11 4 views
2

私は完全に私の関数の名前を変更するとJavaScriptが壊れるのはなぜですか?

$(function() { 

    // Create the chart 
    chart = new Highcharts.StockChart({ 
     ... 
    }); 
}); 

の作品次のことを持っているしかし、私は

createCharts(); 
function createCharts() { 

    // Create the chart 
    chart = new Highcharts.StockChart({ 
     ... 
    }); 
} 

は、私は次のエラーメッセージを取得し、次の変更を行う際

メッセージ: 'Highcharts' は未定義です

他に何も変わっていないのはなぜ私のスクリプトを壊すのでしょうか?

+0

文書内の 'createCharts();は準備ができていますか? – BoltClock

+0

あなたはどのような順序でスクリプトを含んでいますか? –

答えて

3

最初の例では、ドキュメントの準備ができたら(つまり、HighChartsスクリプトが読み込まれた後に)関数が呼び出されます。

$(createCharts); // <- pass createCharts to $()/jQuery.ready() 
function createCharts() { 

    // Create the chart 
    chart = new Highcharts.StockChart({ 
     ... 
    }); 
} 

...またはスクリプトの順序変更:

<head> 
    <!-- libraries first --> 
    <script src="jquery.js"></script> 
    <script src="highcharts.js"></script> 

    <!-- your script last --> 
    <script src="myscript.js"></script> 
</head> 
をあなたの第二の例では、HighChartsスクリプトは、おそらくあなたは準備ができて、ドキュメントを待ついずれかの必要があるので、あなたが実行しているスクリプトの後に定義されます
1

最初の例では、Highcharts定義を含むファイルがロードされた後に関数が実行されます。 2番目は、おそらくHighchartsファイルがロードされる前に、関数定義が見つかるとすぐに実行されます。

1

おそらくHighchartsライブラリに2番目のライブラリがまだロードされていないためです。ハイチャートのjsファイルをロードする前にこのコードを実行していますか?

1

$()は、domが準備されるのを待つ特殊な関数です。

http://api.jquery.com/ready/

私はHighchartsがcreateChartsが呼び出された時点で作成されていないことを推測しているが、DOMの準備が整う前に作成されます。

関連する問題