Рубрика: Павел
Архив статей и записей написанных Грибовым Павлом
API yandex карт и капризы с типами переменных JavaScript
При работе с API Yandex карт столкнулся наконец с еще одним недостатком JavaScript, а точнее отсутствие явного задания типа переменной. Например, долго искал ошибки в этом коде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
lastcoors=JSON.parse(e); // парсим JSON в массив ldt=lastcoors.rows[0].cell[0]; lid=lastcoors.rows[0].cell[1]; limei=lastcoors.rows[0].cell[2]; lx=lastcoors.rows[0].cell[3]; ly=lastcoors.rows[0].cell[4]; lz=lastcoors.rows[0].cell[5]; myPlacemark = new ymaps.Placemark([lx, ly], { balloonContentHeader: "Балун метки", balloonContentBody: "Содержимое <em>балуна</em> метки", balloonContentFooter: "Подвал", hintContent: "Хинт метки" }); myMap.geoObjects.add(myPlacemark); myMap.panTo([lx, ly], {delay: 1500}); |
Метка ставится правильно, а перемещение идет невесть куда. Оказалось, что при разборе JSON, переменные lx и ly почему-то становятся строками, и если функции PlaceMark все равно с чем оперировать, с числом или строкой, то PlanTo непременно работает только с числом.
Решение: в JavaScritpt строка становится числом если участвует в математической операции.
Например:
1 2 |
n=1; //явное число lx=lx*n; // lx тоже становится числом. |
Итого получаем рабочий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
lastcoors=JSON.parse(e); // парсим JSON в массив n=1; ldt=lastcoors.rows[0].cell[0]; lid=lastcoors.rows[0].cell[1]; limei=lastcoors.rows[0].cell[2]; lx=lastcoors.rows[0].cell[3]*n; ly=lastcoors.rows[0].cell[4]*n; lz=lastcoors.rows[0].cell[5]*n; myPlacemark = new ymaps.Placemark([lx, ly], { balloonContentHeader: "Балун метки", balloonContentBody: "Содержимое <em>балуна</em> метки", balloonContentFooter: "Подвал", hintContent: "Хинт метки" }); myMap.geoObjects.add(myPlacemark); //alert(lx);alert(ly); myMap.panTo([lx, ly], {delay: 1500}); |
Установка атрибута readpnly в поле input при помощи Jquery
1 2 3 4 5 6 7 8 9 10 |
<form id="myForm" class="well" ENCTYPE="multipart/form-data" action="controller/saveimei.php" method="post" name="myForm" target="_self"> <label>Название маячка</label> <input name="dvname" id="dvname" type="text" class="span12" placeholder="Как будем его называть?"> <label>Его IMEI</label> <input name="imeicode" id="imeicode" type="text" class="span12" placeholder="IMEI код устройства"> <input name="modeedit" id="modeedit" type="hidden" value="add"> <p align="center"> <button type="submit" class="btn">Сохранить</button> </p> </form> |
Переключение:
1 2 |
$("#imeicode").attr('readonly', true); $("#imeicode").attr('readonly', false); |
Проблема повторной загрузки части страницы методом Jquery.load в IExplorer
Описание проблемы: если на странице несколько раз в подряд вызывается метод Jquery.load с загрузкой html в div, в IExplorer возникает баг, когда загружаемый код берется из кеша.
Решение: дать понять эксплореру что загружаемые данные непременно новые. Для этого я например стал использовать вот такую конструкцию:
$(«#mlist»).load(«controller/mlist.php?»+Math.random(10)+Math.random(10)+Math.random(10));
Jquery form или отслыка POST без обновления страницы
Для реализации сего необходимо подключить плагин jquery.form к своему проекту. Как использовать? Вот пример (взято из проекта ГдеМои):
Оформление формы:
1 2 3 4 5 6 7 8 9 |
<form id="myForm" class="well" ENCTYPE="multipart/form-data" action="controller/saveimei.php" method="post" name="myForm" target="_self"> <label>Название маячка</label> <input name="dvname" id="dvname" type="text" class="span12" placeholder="Как будем его называть?"> <label>Его IMEI</label> <input name="imeicode" id="imeicode" type="text" class="span12" placeholder="IMEI код устройства"> <p align="center"> <button type="submit" class="btn">Сохранить</button> </p> </form> |