0

ある種のマッシュアップを作成しようとしています...関数を1つのファイルに入れたいのですが、Ajax関数を追加すると(途中で)何も表示されません。

また、それらをjQueryで表示したいのですが、一番上の関数(マーカーと情報を含むGoogleマップ)はすべて、一番下の関数を追加するまでうまくいきます。

Google のように (function () {} ) にそれらを追加する必要があります。googlemap関数の最後に?

そして、コードで関数を呼び出すときに、window.onload が Google で呼び出されているため、プレビュー用に ajax を呼び出す方法を教えてください。

$.ready function(){} を使用できることはわかっていますが、関数名を .ready function { } に入れるだけですか?

すべての関数を 1 つのファイルに追加して機能させる方法がわかりません。基本的

これはコードです:

(function() {

        //define global variables
        var map, geocoder, marker, infowindow;

        window.onload = function() {

            //creating the map
            var options = {
                zoom: 5,
                center: new google.maps.LatLng(53.383, -1.483),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };

            map = new google.maps.Map(document.getElementById('map'), options);

            //code for catching the form submit event goes here
            //Getting the reference to the HTML form
            var form = document.getElementById('addressForm');

            //Catching the forms submit event
            form.onsubmit = function () {

                //getting the address from the text input
                var address = document.getElementById('address').value;

                //Making the geocode call
                getAddress(address);

                //Preventing the form from doing a page submit
                return false;
                }
            }

            //Function Stub
            function getAddress(address) {

                //Check to see if we already have a geocode object.
                //If not we create one
                if(!geocoder) {
                    geocoder = new google.maps.Geocoder();
                }

                //Creating the geoCoderRequest Object   
                var geocoderRequest = {
                    address: address
                }

                //Making the geocode request
                geocoder.geocode(geocoderRequest, function (results, status) {

                    //Check if status is ok beofre proceeding
                    if (status == google.maps.GeocoderStatus.OK){

                        //Center the map on the returned location
                        map.setCenter(results[0].geometry.location);

                        //Check to see if already a Marker there
                        if (!marker){
                            //Create a new marker and add it to the map
                            marker = new google.maps.Marker({
                                map: map    
                                });
                            }
                        //Setting position of the Marker to returned location
                        marker.setPosition(results[0].geometry.location);

                            //Check to see if we've already an info window
                            if(!infowindow) {
                                //Creating a new info window
                                infowindow = new google.maps.InfoWindow();
                                }
                            //Creating the content of the info window to the Address
                            //and the returned position
                            var content = '<strong>' + results[0].formatted_address + '</strong><br />';
                            content += 'Lat: ' + results[0].geometry.location.lat() + '<br />';
                            content += 'Lng: ' + results[0].geometry.location.lng();

                            //Adding the content to the info window
                            infowindow.setContent(content);

                            //Opening the infoWindow
                            infowindow.open(map, marker);

                        }

                });
            }

            })();


    // beginning of new function
            var xhr = false;
            var xPos, yPos;

            function prev(){
                    var link = document.getElementByTagName("a").onmouseover = showPreview;
                }

        function showPreview(evt) {
            if (evt) {
                var url = evt.target;
            }
            else{
                evt = window.event;
                var url = evt.srcElement;
            }
            xPos = evt.clientX;
            yPos = evt.clientY;

            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest();
            }
            else {
                if (window.ActiveXObject) {
                    try {
                        xhr = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    catch (e) { }
                }
            }

            if (xhr) {
                xhr.onreadystatechange = showContents;
                xhr.open("GET", url, true);
                xhr.send(null);
            }
            else {
                alert("Sorry, but I couldn't create an XMLHttpRequest");
            }
            return false;
        }

            function showContents() {
                if (xhr.readyState == 4) {
                    if (xhr.status == 200) {
                        var outMsg = xhr.responseText;
                    }
                    else {
                        var outMsg = "There was a problem with the request " + xhr.status;
                        }
                        var preview = document.getElementById('preview');
                        preview.innerHTML = outMsg;
                        preview.style.top = parseInt(yPos)+2 + "px";
                        preview.style.left = parseInt(xPos)+2 + "px";
                        preview.style.visibility = "visible";

                        preview.onmouseout = function(){
                            document.getElementById('preview').style.visibility = "hidden";
                        }
                    }
4

1 に答える 1

3

関数を追加する理由によって異なります。しかし、ここに簡単な式があります。ドキュメントの準備ができたときにのみ関数を呼び出し、ドキュメントがロードされたときに関数を1回呼び出すようにしたい場合。次に、それらを「匿名関数」として追加します

例:

$(function () {
    //you code
    ...............
    // you can call your named functions also here. 
    //like
    somefunction();
});

ただし、後でドキュメントが既にロードされているときにも呼び出されることが予想される場合。次に、「名前付き関数」を追加します

例:

function somename()
{
    ............
}

どちらの場合も、それらを1つのファイルに含めることができ、関数の最後で、 jQuery();のようにJavaScriptで匿名関数をすぐに呼び出す方法です。document.ready

于 2012-05-11T17:08:41.813 に答える