3

Lat Lon ペアまたは address から場所を取得し、lat、lon、および address 入力フィールドを更新するための小さな Google マップ スクリプトがあります。

ここでjsfiddleを参照してください

「描画」ボタンをクリックすると、呼び出される関数が呼び出されるcodeAddress()はずです。しかし、firebugコンソールでは次のようになります:

Error: ReferenceError: codeAddress is not defined

codeAddress()が定義されていない理由がわかりません...

奇妙なことは、関数を外側に移動すると

jQuery(document).ready(function(){}それは機能します(jsFIDDLEを参照)

(移動する必要もありますvar marker-そうしないと、マップが中央に配置され、marker is undefinedエラーが発生します。

だから私の質問は非常に簡単です、私は何を間違っていますか? なぜ同じ機能が の外側で機能し、jQuery(document).ready(function(){}内側では機能しないのですか?

そしてサイドキックの質問:マーカーがドラッグされたときに住所入力フィールドを更新するにはどうすればよいですか(緯度経度入力のように..)???

更新- すべてのおかげで - もう 1 つの重要なことを学びました。残念ながら、すべて有効な回答と解決策ですが、受け入れることができるのは1つだけです。私にとって、理解するのが最も簡単な解決策は(JSに慣れていないため、完璧な練習ではないかもしれませんが)@cowlsです。 .

4

3 に答える 3

3

簡単な解決策は交換することです

function codeAddress() { ... }

codeAddress = function() { ... }

問題は、codeAddress を、ドキュメント対応ハンドラーにバインドしている関数に対してローカルなスコープを持つ変数として宣言していることです。したがって、その関数が終了するとすぐに、codeAddress は存在しなくなります。2 番目の宣言 ("var" がないことに注意してください) は、codeAddress をグローバル変数として宣言しているため、ready 関数が終了した後も引き続きアクセスできます。

于 2012-12-06T09:48:48.583 に答える
2

onclick を使用するのではなく、document.ready メソッド内の必要な要素にクリック ハンドラーを割り当てる必要があります。

例えば

$(input).click(function() { codeAddress() });

コードアドレス関数をすべての入力ボックスのクリックイベントに割り当てます。明らかに、これを特定のクラスまたはIDでターゲットにしたい

onclick を使用するよりも、これがベスト プラクティスです。

于 2012-12-06T09:45:45.257 に答える
2

ボタンがクリックcodeAddress()されると、 がグローバル スコープで検索されますが、内部で定義されています$(document).ready()

ここでは、関数を外部で宣言するの$(document).ready()がおそらく最善です。ready ハンドラーの内部からのみ呼び出す関数のみを内部で定義する必要があります。これを行うと、ready ハンドラーをよりクリーンに保つことができます。

マーカーが場所の上にドラッグされたときに場所を見つけるには、GeoCoderサーバーを使用してテキストの場所にマップする必要があります。

var geocoder = new google.maps.Geocoder();

google.maps.event.addListener(marker, 'dragend', function(evt) {
    geocoder.geocode({latLng: evt.latLng}, function(results, status) {
        if (status==google.maps.GeocoderStatus.OK && results.length) {
            // do something with results[0..x].formatted_address
        }
    })
});
于 2012-12-06T09:46:22.253 に答える