Подтвердить что ты не робот

Функция не определена - неотображаемый referenceerror

У меня есть эта непроверенная функция referenceerror не определена ошибка, которая не понятна.

Если у меня

$(document).ready(function(){
 function codeAddress() {
  var address = document.getElementById("formatedAddress").value;
  geocoder.geocode( { 'address': address}, function(results, status) {
   if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
   }
  });
 }
});

и

<input type="image" src="btn.png" alt="" onclick="codeAddress()" />
<input type="text" name="formatedAddress" id="formatedAddress" value="" />

Когда я нажимаю кнопку, он вернет "uncaught referenceerror".

Но если я поместил codeAddress() вне $(document).ready(function() {}, то он работал fine.

Мое намерение заключается в кодAddress() в документе document.ready.function.

4b9b3361

Ответ 1

Как удалить атрибут onclick и добавить идентификатор:

<input type="image" src="btn.png" alt="" id="img-clck" />

И ваш script:

$(document).ready(function(){
    function codeAddress() {
        var address = document.getElementById("formatedAddress").value;
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
            }
        });
    }
    $("#img-clck").click(codeAddress);
});

Таким образом, если вам нужно изменить имя функции или что-то еще не нужно касаться html.

Ответ 2

Проблема заключается в том, что codeAddress() не имеет достаточного количества возможностей для вызова с помощью кнопки. Вы должны объявить его вне обратного вызова ready():

function codeAddress() {
    var address = document.getElementById("formatedAddress").value;
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
        }
    });
}


$(document).ready(function(){
    // Do stuff here, including _calling_ codeAddress(), but not _defining_ it!
});

Ответ 3

Ваша проблема заключается в том, что вы не понимаете область действия, которую вы настраиваете.

Вы передаете функцию ready самой функции. В рамках этой функции вы создаете еще одну функцию под названием codeAddress. Этот существует в пределах области, которая его создала, а не внутри объекта окна (где все и его дядя могли называть его).

Например:

var myfunction = function(){
    var myVar = 12345;
};

console.log(myVar); // 'undefined' - since it is within 
                    // the scope of the function only.

Посмотрите здесь немного больше на анонимные функции: http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

Другое дело, что я замечаю, что вы используете jQuery на этой странице. Это упрощает настройку обработчиков кликов, и вам не нужно вникать в настройку атрибута onclick в HTML. Вам также не нужно использовать метод codeAddress для всех:

$(function(){
    $("#imgid").click(function(){
        var address = $("#formatedAddress").value;
        geocoder.geocode( { 'address': address}, function(results, status) {
           if (status == google.maps.GeocoderStatus.OK) {
             map.setCenter(results[0].geometry.location);
           }
        });
    });  
});

(Вы должны удалить существующий onclick и добавить идентификатор к элементу изображения, который вы хотите обработать)

Обратите внимание, что я заменил $(document).ready() ярлыком только $() (http://api.jquery.com/ready/). Затем метод click используется для назначения обработчика щелчка элементу. Я также заменил ваш document.getElementById на объект jQuery.

Ответ 4

Вы должны написать это тело функции вне ready();

потому что ready используется для вызова функции или для привязки функции с идентификатором привязки, как это.

$(document).ready(function() {
    $("Some id/class name").click(function(){
        alert("i'm in");
    });
});

но вы не можете сделать это, если вы вызываете функцию showAmount onchange/onclick event

$(document).ready(function() {
    function showAmount(value){
        alert(value);
    }

});

Вы должны написать "showAmount" вне готового();

function showAmount(value){
    alert(value);//will be called on event it is bind with
}
$(document).ready(function() {
    alert("will display on page load")
});

Ответ 5

Проверьте, правильно ли вы указали js-ссылки. Сначала файлы JQuery, а затем ваши пользовательские файлы. Поскольку вы используете '$' в своих js-методах.