Клуб API Карт

В IE7 пустая карта, Opera и FF - всё ок

Пост в архиве.
Королев Михаил
19 ноября 2008, 14:04

вывод вот такой:

<div><input id='mapOn' style='display:none;' type='button' value='Показать на карте' onclick='ShowMap(this.form)'/><input id='mapOff' type='button' value='Удалить карту' onclick='CloseMap(this.form)'/><input type=hidden name='maplongtitude' value='37.59366819034059'><input type=hidden name='maplatitude' value='55.883635813014436'><input type=hidden name='mapzoom' value='15'><br>
<div id='mapplace' style='height:300px; width:100%;'><div id='YMapsID' style='height:300px; width:100%;'></div></div></div><script type="text/javascript">document.body.onload =ShowMap(document.getElementById("form1"));</script>

 

и собственно кусок функции:

из ShowMap(f) вызывается после подготовки: 

 YMaps.load(initform(f));


 function initform(f) {
  map = new YMaps.Map(document.getElementById("YMapsID"));
  
  if (f.maplongtitude.value!='') {
  map.setCenter(new YMaps.GeoPoint(f.maplongtitude.value,f.maplatitude.value), f.mapzoom.value);
  map.openBalloon(new YMaps.GeoPoint(f.maplongtitude.value,f.maplatitude.value), adr, {hasCloseButton: false, mapAutoPan: 0});
  }

ну и так далее...

результат в IE - пустое серое поле с неработающими элементаим управления

в Opera и FF - всё ок. 

15 комментариев
В YMaps.load нужно передавать ссылку на функцию, а у Вас передается результат выполнения функции initform, т.е. undefined, если она у Вас ничего не возвращает. Попробуйте так: YMaps.load(function () { initform(f); });
Королев Михаил
19 ноября 2008, 15:23
непомогло, да и в FF/Opera работает же..
javascript в IE, FF и Опере работает по разному... поэтому то, что работает в двух браузерах и не работает в третьем, означает лишь-то, что написано что-то не так...
Королев Михаил
19 ноября 2008, 17:19
это-то понятно.. осталось малость самая - понять - "что" :)
Королев Михаил
19 ноября 2008, 17:41
на самом деле функция initform(f) -самодостаточна, это переделанная немного init() из примеров, вызываемая там из body onload. посему поставил вызов её непосредственно, вместо, опять же как в другом из примеров через YMaps.load. то есть YMaps.load(function () { initform(f); }); заменил на initform(f); опять непомогло. и только для ie
Пример из документации у вас тоже не работает в IE?
Королев Михаил
19 ноября 2008, 18:35
работает естественно.. я ниже написал что помогло.. и оно-же меня ещё больше озадачило..
Королев Михаил
19 ноября 2008, 18:28
чудесным образом помогла замена: но как вы понимаете это не выход, а выходка.. У кого-нибудь предложения будут? использовать
У меня заработало в ИЕ6-7 вот так:                                                
                   
На самом деле, здесь та же ошибка, что отметил chalyu: неправильно писать document.body.onload =ShowMap(document.getElementById("form1")); функция ShowMap будет выполнена сразу же, когда интерпретатор дойдет до этой строчки, а в document.body.onload будет помещен результат выполнения функции ShowMap(document.getElementById("form1")), т.е. undefined.
Королев Михаил
20 ноября 2008, 17:17
да, это понял сам тогда, но ни document.body.onload =+'ShowMap(document.getElementById("form1"));'; window.onload ='ShowMap(document.getElementById("form1"));'; не помогают.. пока оставил settimeout.
Проблема в том, что Вы вешаете обработчик на onload уже после загрузки страницы. Перенесите все скрипты в тэг head:         В таком варианте работает в ФФ и ИЕ нормально
Королев Михаил
20 ноября 2008, 17:37
кхм.. К сожалению на момент выдачи заголовка ещё неизвестно понадобится ли уже раскрытая карта или нет - Собственно уже опубликовал - можно глянуть - http://www.oneway.ru - если в регистрации указать точное место - то при оформлении заказа будет не просто возможность открыть карту и увидеть введённый адрес, а карта будет раскрыта с указанием места.
А почему на момент выдачи заголовка нельзя узнать, нужна карта или нет?
Королев Михаил
20 ноября 2008, 18:04
модульность... Переделать можно - но многое придётся менять, хотелось-бы малой кровью. Хотя ещё буду думать. Сейчас больше беспокоит ошибка в обработчике ошибок адреса