1

ユーザーの現在の郵便番号を取得し、それをdivに表示する次のコードがあります。

(function ($, geolocation) {
    if (geolocation) {
        geolocation.getCurrentPosition(function (position) {
            $.getJSON(
                "http://ws.geonames.org/findNearestAddressJSON?callback=?",
                {
                    lat : position.coords.latitude,
                    lng : position.coords.longitude
                },
                function (data) {
                    $(function () {
                        $('#zip').text(data.address.postalcode);
                    });
                }
            );
        });
    }
}(jQuery, navigator.geolocation));

コードは実行さon document readyれると思います。これは実行中のコードと同じonLoadですか?とにかく、ボタンがクリックされたときにこのコードを実行することは可能ですか?私はこのようなものがうまくいくと思っていましたが、これを使用しても郵便番号は生成されませんon document ready、またはボタンをクリックしたとき:

function update() {
    ...code from above
}
$('#button').click(function(){update();});
4

3 に答える 3

3

これは、コードの一部(呼び出しdocument.ready内の部分)を除いて、では実行されません。function (data) { }

いいえ、document.readyとは異なりonLoadます。document.readyJavascriptを介してDOMにアクセスできる場合です(ただし、必ずしもレンダリング/フェッチされる必要はありません)。onLoadすべてがロードされたときです(そしておそらくレンダリングされた---画像などを考えてください)。

ボタンクリックで同じ機能を実行するには、すでに多かれ少なかれ正しい方向に進んでいます。関数への参照が必要です。

var update = function ($, geolocation) {
    // blah
};
// this will call the same function like you're doing above
update(jQuery, navigator.geolocation);

次に、クリックハンドラーを介して実行します。

// don't forget that this has to be in a document.ready handler
jQuery(function ($) {
    $('#button').click(function () { update($, navigator.geolocation); });
});
于 2012-08-17T15:24:48.073 に答える
2

コードを独自の関数に入れ、ロード時にその関数を呼び出します。onclick(getZipCode())次に、同じ関数を呼び出すボタンを用意します。オンロードしたくない場合は、$(function() {});jQueryから削除してください。

$(function() {
    //On Document Ready, call getZipCode
    getZipCode(navigator.geolocation);
});

function getZipCode(geolocation) {
    if (geolocation) {
        geolocation.getCurrentPosition(function (position) {
           $.getJSON(
               "http://ws.geonames.org/findNearestAddressJSON?callback=?",
                {
                    lat : position.coords.latitude,
                    lng : position.coords.longitude
                },
                function (data) {
                    $(function () {
                        $('#zip').text(data.address.postalcode);
                    });
                }
            );
        });
    }
}
于 2012-08-17T15:30:14.483 に答える
1

コードはドキュメント対応で実行されると思います。これはonLoadを実行しているコードと同じですか?

ページ全体がサーバーからフェッチされ、すべての画像タグまたは他の要素が読み込まれると、が発生します。確かに長い時間がかかるため、 Jqueryonload eventは、という名前の独自の定義済みイベントを使用します。このイベントはdocument.ready、ページを処理する準備ができたときに発生します。スクリプト(ドキュメントが読み込まれる前に発生します)

これは、JQueryEnlightenmentの本から引用したものです。

window.onloadネイティブJavaScriptイベントを使用して、Webページがブラウザーに完全にロードされたときにプログラムで処理できます。ただし、すべてが読み込まれたことを示すイベントは、すべてのアセット(画像、Flashなど)が読み込まれるまで発生しないため、このイベントの待機にはかなり時間がかかる可能性があります。より良い解決策は、DOMが操作可能になり次第、スクリプトを開始することです。jQueryは、DOMのスクリプトを作成する準備ができた後、window.onloadイベントが発生する前に実行されるカスタムイベントを提供します。これはready()と呼ばれるカスタムjQueryイベントです。この関数に渡される引数が1つあります。これは、jQuery関数への参照です。

そして、クリック機能の場合、更新機能はどこにありますか?document.readyの外で定義してみてください。

于 2012-08-17T15:22:57.707 に答える