Функция не определена - неотображаемый 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.
Ответы
Ответ 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-методах.