#javascript #google-maps
#javascript #google-карты
Вопрос:
У меня есть следующий код в теле
<div id="searchresult" onmouseover="changeMarker(marker1)">
и следующее в заголовке
function changeMarker(marker) {
alert(marker);
}
Теперь, когда я наведу курсор мыши на div, я получаю следующую ошибку в консоли javascript
Uncaught ReferenceError: marker1 is not defined
Если вместо этого у меня есть следующее, где функция не принимает переменные, вызывается окно предупреждения.
function changeMarker() {
alert('hi');
}
<div id="searchresult" onmouseover="changeMarker()">
Я где-то допустил ошибку?
Редактировать
Я забыл, что определил marker1 в initialize () следующим образом (я использую Google maps v3 api)
var marker1 = new google.maps.Marker({
position: new google.maps.LatLng(1.288693,103.846733),
map: map,
icon: "http://chart.apis.google.com/chart?chst=d_map_pin_letteramp;chld=1|c41200|ffffff"
});
Это остальная часть кода, который я действительно использую:
<div id="searchresult" onmouseover="changeMarker(marker1)">
и функция
function changeMarker(marker) {
var icon = new Google.maps.MarkerImage({ url:"http://chart.apis.google.com/chart?chst=d_map_pin_letteramp;chld=1|ffffff|c41200"});
marker.setIcon(icon);
}
Я получаю ту же ошибку: неперехваченная ошибка ссылки: marker1 не определен
Комментарии:
1. вы никогда
marker1
нигде не определяли, так откуда он знает, что передавать? Вы никогда не говорили, что это за переменнаяmarker1
. Если вы пытаетесь отправить строку в свою функцию, то она должна быть заключена в кавычки:<div id="searchresult" onmouseover="changeMarker('marker1')">
2.
marker1
Определено ли это как глобальное? Это вscript
теге, который предшествуетdiv
тегу?3. да, marker1 и функция changeMarker определены в теге script, который находится в head … как мне сделать marker1 глобальным?
4. marker1 определяется в функции initialize(), которая называется <body onLoad=»инициализировать()»>
Ответ №1:
Я забыл, что определил marker1 в initialize()
Тогда область ее действия ограничена initialize
и недоступна в более широкой области.
Вы могли бы удалить var
, чтобы сделать его глобальным, но вам, вероятно, было бы лучше назначить свой обработчик событий с JS внутри initialize
вместо использования атрибутов HTML для этого.
Комментарии:
1. я попытался удалить ‘var’, как вы предложили, и получил ошибку ‘Uncaught ReferenceError: Google не определен’…
2. Мне пришлось бы просмотреть весь код, чтобы понять, почему это происходит. Придерживайтесь подхода, который, как я сказал, был лучше с самого начала. Используйте JS для подключения обработчиков событий.
3. Я попытался добавить следующий код внутри initialize(): document.getElementById(«searchresult»).onmouseover= function() {changeMarker(marker1);} Я получаю ошибку: Ошибка неперехваченной ссылки: Google не определен
4. Когда я использую следующее, это работает: document.getElementById(«searchresult»).onmouseover= function() {location.href=»page2.htm «;}
Ответ №2:
Похоже, этот код работает правильно:
<script>
function changeMarker(marker) {
alert(marker);
}
var marker1 = 'Test Data';
</script>
<style>
#searchresult {
background-color: red;
}
</style>
<div id="searchresult" onmouseover="changeMarker(marker1)">
Test Box
</div>
Однако что-то подобное не сработает, потому что marker1
область действия ограничена обратным вызовом Google.
<script>
function changeMarker(marker) {
alert(marker);
}
google.setOnLoadCallback(function() {
var marker1 = 'Test Data';
});
</script>
Чтобы исправить это, вы могли бы сделать:
<script>
function changeMarker(marker) {
alert(marker);
}
var marker1;
google.setOnLoadCallback(function() {
marker1 = 'Test Data';
});
</script>
Комментарии:
1. будет ли это работать, если я сделаю переменную marker1 глобальной? как мне сделать это глобальным?
2. Я добавил дополнительный фрагмент кода. Я не силен в javascript, поэтому, возможно, есть более приятный способ сделать это, но я включил простой способ.
3. Я попробовал это, и я получаю ошибку: неперехваченная ошибка ссылки: Google не определен
4. Вероятно, это другая проблема. Возможно, вы неправильно загружаете Google jsapi?
5. Я избавился от ошибки Google … это потому, что я использовал Google с заглавной буквы в функции changeMarker
Ответ №3:
Я думаю, это поможет:
<div id="searchresult" onmouseover="function(){changeMarker(marker1)}">
Комментарии:
1. Я предположил (неправильно?) это существовало в коде, которым автор не поделился.