Функция не определена - uncaught 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(){}, то он работает нормально.
Мое намерение заключается в том, чтобы поместить codeAddress() в функцию document.ready.function.
12 ответов
Как насчет удаления onclick
атрибут и добавление идентификатора:
<input type="image" src="btn.png" alt="" id="img-clck" />
И твой сценарий:
$(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.
Проблема в том, что 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!
});
Ваша проблема здесь в том, что вы не понимаете объем, который вы устанавливаете.
Вы передаете 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.
Вы должны написать тело этой функции за пределами ready();
потому что ready используется для вызова функции или для привязки функции с идентификатором привязки следующим образом.
$(document).ready(function() {
$("Some id/class name").click(function(){
alert("i'm in");
});
});
но вы не можете сделать это, если вызываете функцию onchange / onclick функции showAmount
$(document).ready(function() {
function showAmount(value){
alert(value);
}
});
Вы должны написать "showAmount" за пределами ready();
function showAmount(value){
alert(value);//will be called on event it is bind with
}
$(document).ready(function() {
alert("will display on page load")
});
Очистка кеша решила проблему для меня, или вы можете открыть его в другом браузере
index.js
function myFun() {
$('h2').html("H999999");
}
index.jsp
<html>
<head>
<title>Reader</title>
</head>
<body>
<h2>${message}</h2>
<button id="hi" onclick="myFun();" type="submit">Hi</button>
</body>
</html>
Еще кое-что. По моему опыту, эта ошибка возникла из-за другой ошибки, предшествующей
Function is not defined - uncaught referenceerror
.
Итак, просмотрите консоль, чтобы увидеть, существует ли предыдущая ошибка, и если да, исправьте любую существующую. Возможно, вам повезло, потому что они были проблемой.
Иногда это происходит из-за кеша и файлов cookie, а функция, которую мы создали для файла js, не может быть загружена браузером. Поэтому попробуйте очистить кеш и файлы cookie или нажмите CTRL+F5 на той же странице. Также вы можете попробовать открыть его в режиме инкогнито.
Думал, что упомяну об этом, потому что мне потребовалось время, чтобы исправить эту проблему, и я не мог найти ответ нигде на SO. Код, над которым я работал, работал на моего коллегу, но не на меня (я получал ту же ошибку). У меня это сработало в Chrome, но не в Edge.
Я смог заставить его работать, очистив кеш в Edge.
Возможно, это не ответ на этот конкретный вопрос, но я подумал, что упомяну об этом, если это сэкономит кому-то немного времени.
пожалуйста, добавьте функцию вне функции .ready.
$(document).ready(function () {
listcoming();
});
function listcoming() {}
Вот так... ему не хватает места и объема внутри .ready f
Пожалуйста, проверьте, правильно ли вы предоставили JS ссылки. Сначала файлы JQuery, а затем ваши пользовательские файлы. Так как вы используете '$' в своих методах js.
Если вы поместите функцию между (), это будет локальная функция, поэтому функция предназначена только для этого скрипта.
И тогда вы сможете использовать функцию в каждом скрипте
Просто переместите функцию во внешний файл js, так как он включает код $. Эта ошибка будет устранена.