2011-07-18 14 views
0

は、私は、私も準備ができて、ブロックの外側で宣言された関数を持っているJavascriptの機能へのアクセス

$(function() { function parseData(){...})};内のコードのブロックを持っています。私はコードビハインドでそれをフックするので、これは外です。ddlCategories.Attributes.Add("onchange", "getDataFields()");

getDataFields関数から、私はparseDataを呼び出す必要がありますが、見つからないようです。

レディブロックの外側から準備ブロックにあるparseData()にアクセスするにはどうすればよいですか?

(用語の一部がオフになっている場合は申し訳ありません - 私はJSに今の私)

+0

http://stackoverflow.com/questions/111102/how-do-javascript-closures-workを参照してください。 –

答えて

1

何らかの理由で、parseData()がreadyブロック内にある必要がありますか?なぜそれをトップレベルの関数にしないのですか?

<script type="text/javascript"> 

function parseData() { ... } 

$(document).ready(function() { 
    ddl.Categories..... 
} 
<script> 
+0

他にもparseData()が呼び出されているので、他の場所でも同じ問題が発生します。 – Jeff

+0

はい、parseDataは何をしていますか? DOM操作をしていない限り、トップレベルの機能にはならない理由はなく、実行する場所/時間に関係なく、すべてのスクリプトで使用できるようになります。 –

+0

私はこれを試しました。私は準備ができているブロックの中に定義されている変数の束を持っているので、それは困難です。レディブロック内の関数を呼び出す方法はありませんか? – Jeff

0

あなたは$(function() { ... })コールバックの外側の関数を宣言する必要があります。

+0

申し訳ありませんがわかりません。 – Jeff

+0

レディブロックの外に関数を移動します。 – SLaks

1

準備ブロックの外に定義するだけです。現在、この機能の範囲のためにアクセスできない状態です。

何も実行されないので、定義はいつでも安全に$(function() { ... })ブロックの外に出ることができます。

$(function() { ... }); 

function parseData() { ... } 

はしかし、あなたは、構文エラーを持っているように見える:)};});でなければなりません。

+0

私はカフを入力していたので構文がありました。 – Jeff

+0

私は私がフォローしているかわかりません。 – Jeff

+0

@ Jeff:どこの関数にもアクセスしたい場合は、 '$(...)'ブロックの代わりに直接それらを公開する必要があります。さもなければ、それらの関数は '$(...)'の外ではアクセスできません。この動作は「スコープ」と呼ばれます。 – pimvdb

1

自己実行する$(function(){})の外でparseData関数を宣言します。ブロック。

var parseData = function() { ... }; 

$(function() { ... }); 

あなたは、グローバル関数の宣言が、自己実行中の関数の内部でそれを定義、その後、自己実行中の関数内で参照するために必要なものがある場合:

var parseData; 

$(function() { parseData = function() { ... }; }); 

はさておき、宣言機能としてグローバルな変数は、悪い考えです。

関連する問題