Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Не работает js скрипт при <body onLoad="initialize()"> (http://forum.oszone.net/showthread.php?t=171913)

Artem-Samsung 01-04-2010 17:16 1382609

Не работает js скрипт при <body onLoad="initialize()">
 
Скрипт:
Код:

<!--
function dynamicSelect(id1, id2) {
// Сперва необходимо проверить поддержку W3C DOM в браузере
 if (document.getElementById && document.getElementsByTagName) {
// Определение переменных, ссылающихся на списки
  var sel1 = document.getElementById(id1);
  var sel2 = document.getElementById(id2);
// Клонирование динамического списка
  var clone = sel2.cloneNode(true);
// Определение переменных для клонированных элементов списка
  var clonedOptions = clone.getElementsByTagName("option");
// Вызов функции собирающей вызываемый список
  refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
// При изменении выбранного элемента в первом списке: // вызов функции пересобирающей вызываемый список
  sel1.onchange = function() {
  refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
  }
 }
}
// Функция для сборки динамического списка
function refreshDynamicSelectOptions(sel1, sel2, clonedOptions) {
// Удаление всех элементов динамического списка
 while (sel2.options.length) {
  sel2.remove(0);
 }
 var pattern1 = /( |^)(select)( |$)/;
 var pattern2 = new RegExp("( |^)(" + sel1.options[sel1.selectedIndex].value + ")( |$)");

// Перебор клонированных элементов списка

 for (var i = 0; i < clonedOptions.length; i++) {

// Если название класса клонированного option эквивалентно "select" // либо эквивалентно значению option первого списка

  if (clonedOptions[i].className.match(pattern1) ||
  clonedOptions[i].className.match(pattern2)) {

// его нужно клонировать в динамически создаваемый список

  sel2.appendChild(clonedOptions[i].cloneNode(true));
  }
 }
}
window.onload = function() {
        dynamicSelect("A", "B");
        dynamicSelect("B", "C");
}
//-->

Для коректной работы Google Maps мне необходим атрибут в боди - onLoad="initialize()"
Но с ним не работает вышеупомянутый скрипт (( Что делать?

Sham 01-04-2010 17:29 1382618

initialize() можно перенести в window.onload, на последнее место (хотя можно поэкспериментировать)...

Artem-Samsung 01-04-2010 17:39 1382632

Да, кстати. функция инициалайз:

Код:

<script type="text/javascript">
function initialize() {
    var latlng = new google.maps.LatLng(50.414527, 30.528978);
        //var image = 'flag.png';
        var myOptions = {
      zoom: 16,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.HYBRID
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        //var beachMarker = new google.maps.Marker({
    //    position: latlng,
    //    map: map,
    //    icon: image
    //});
  }
</script>


Artem-Samsung 01-04-2010 19:32 1382694

Да. сработало все.
Добавил <script language="javascript">window.onload = initialize();</script> в конец.
Спасибо большое

Sham 01-04-2010 21:10 1382753

я про эту функцию (3 строкой добавить если):
Цитата:

Цитата Artem-Samsung
window.onload = function() {dynamicSelect("A", "B"); dynamicSelect("B", "C"); } »

Код:

window.onload = function() {
        dynamicSelect("A", "B");
        dynamicSelect("B", "C");
        initialize();//сюда
}


Greendumb 06-08-2010 18:14 1468351

Добрый день! У меня почти такая же проблема, но в виду моей неопытности (разбираться с этим делом я начал только с сегодняшнего утра))) решить самостоятельно мне ее не удалось. Работает только один скрипт из двух (первый выводит пользовательскую Яндекс.карту, второй - выпадающее меню), по одному работают хорошо. Буду очень признателен за помошь!
Код:

<script src="http://api-maps.yandex.ru/1.1/index.xml?key=AFPxDEwBAAAAULUMHwIAVKW8xZQxVL0kFj4lHUsAoB2I_gMAAAAAAAAAAAAmdPI7vVsRLfKXb1_JHhJsSRZM4w==" type="text/javascript"></script>
<script type="text/javascript">// <![CDATA[
        window.onload = function () {
            var options = {
                    tileUrlTemplate: "http://interaktivecard.com/images/maps/%z/tile-%x-%y.png",
                    controls: {
                        typeControl: true,
                        miniMap: true,
                        toolBar: true,
                        scaleLine: true
                    },
                    scrollZoomEnabled: false,
                    mapCenter: new YMaps.GeoPoint(33.8674398742517, 44.7531052865182),
                    backgroundMapType: YMaps.MapType.MAP,
                    mapZoom: 14,
                    isTransparent: true,
                    smoothZooming: false,
                    layerKey: "my#layer",
                    mapType: {
                        name: "Схема",
                        textColor: "#000000"
                    },
                    copyright: ""
                },
                map = new YMaps.Map(document.getElementById("YMapsID")),
                myData = new YMaps.TileDataSource(options.tileUrlTemplate, options.isTransparent, options.smoothZooming);

            myData.getTileUrl = function (tile, zoom) {
                return this.getTileUrlTemplate().replace(/%x/i, tile.x).replace(/%y/i, tile.y).replace(/%z/i, zoom);
            }

            var MyLayer = function () {
                return new YMaps.Layer(myData);
            }
            YMaps.Layers.add(options.layerKey, MyLayer);

            var mapLayers = options.backgroundMapType ? options.backgroundMapType.getLayers() : [],
                myMapType = new YMaps.MapType(YMaps.jQuery.merge(mapLayers, [ options.layerKey ]), options.mapType.name, { textColor: options.mapType.textColor });

            map.setCenter(options.mapCenter, options.mapZoom, myMapType);
            if (options.copyright) {
                map.addCopyright(options.copyright);
            }

            if (options.controls.typeControl) {
                map.addControl(new YMaps.TypeControl([ myMapType, YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID ], [1, 2, 3]));
            }
       
            if (options.controls.miniMap) {
                map.addControl(new YMaps.MiniMap());
            }
            if (options.controls.toolBar) {
                map.addControl(new YMaps.ToolBar());
            }
       
            if (options.scrollZoomEnabled) {
                map.enableScrollZoom();
            }
            map.addControl(new YMaps.SmallZoom());


  // Метка номер один
   
var placemark = new YMaps.Placemark(new YMaps.GeoPoint(33.869136241394116, 44.7623886062664), {style: "default#dpsIcon"});
placemark.name = "ДПС"; // Заголовок балуна
placemark.description = "<div>Здесь находится пост ДПС</div>"; // Текст балуна
placemark.setBalloonContent('<div style="»text-align:center»" mce_style="»text-align:center»"><b>Пост ДПС</b><br>Здесь находится пост ДПС</div>');
map.addOverlay(placemark);
placemark.balloonOpen();
}
// ]]></script>
<form>
<p><span style="font-size: large;"><strong><span style="color: #800000;">Бахчисарай </span></strong></span></p>
<p><span style="font-size: small;"><em><span style="color: #800000;"><strong><span style="color: #999999;"><br /></span></strong></span></em></span></p>
<p><select id="Country" name="Country"><option value="select">Выберите раздел...</option> <option value="gos">Гос.предприятия</option> <option value="chast">Частные предприятия</option> <!-- <option value="org">Общественные организации</option> --> </select> <select id="City" name="City"><option class="select" value="select">Выберите подраздел...</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/49.html">Государсвенная и городская структура</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/50.html">Детские учреждения</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/51.html">Жилищно-коммунальное хозяйство</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/52.html">Культура и искусство</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/53.html">Медицинские учреждения</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/54.html">Образование и учебные заведения</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/55.html">НИИ</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/56.html">Почта, телефон, телеграф</option><option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/57.html">Религиозные организации</option> <option class="gos" value="http://interaktivecard.com/component/yandexmaps/map/58.html">Землепользование</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/59.html">Автомобили, СТО</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/60.html">Агропромышленный комплекс</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/61.html">Безопасность - организации, оборудование</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/62.html">Организации ВЭД</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/63.html">Вторичные ресурсы</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/64.html">Исследование рынка</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/65.html">Компьютеры. Оргтехника</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/66.html">Легкая и текстильная промышленность</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/67.html">Лесная, деревообрабатывающая пром-ть</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/68.html">Мебель, интерьер</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/69.html">Медицинские товары и услуги</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/70.html">Металлы, металлообработка, машиностроение</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/71.html">Оборудование</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/72.html">Общественное питание</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/73.html">Продукты питания: производство, ОПТ, розница</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/74.html">Радиопромышленность</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/75.html">Рекламно-информационная деятельность</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/76.html">Розничные торговые организации</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/77.html">Связь</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/78.html">СМИ</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/79.html">Строительство и материалы</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/80.html">Судостроение, судоремонт</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/81.html">Товары для животных</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/82.html">Товары народного потребления</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/83.html">Торжественные мероприятия</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/84.html">Трудоустройство</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/85.html">Транспорт</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/86.html">Туризм, спорт, отдых</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/87.html">Услуги</option> <option class="chast" value="http://interaktivecard.com/component/yandexmaps/map/88.html">Химическая продукция</option> <!-- <option class="org" value="Minsk">Все остальное</option> <option class="org" value="Bobruisk">...и так далее</option> --> </select> <input onclick="top.location.href = this.form.City.options[this.form.City.selectedIndex].value" type="button" value="Ok" /></p>
<p> </p>
</form>
<script type="text/javascript">// <![CDATA[
function dynamicSelect(id1, id2) {

// Сперва необходимо проверить поддержку W3C DOM в браузере

 if (document.getElementById && document.getElementsByTagName) {

// Определение переменных, ссылающихся на списки

  var sel1 = document.getElementById(id1);
  var sel2 = document.getElementById(id2);

// Клонирование динамического списка

  var clone = sel2.cloneNode(true);

// Определение переменных для клонированных элементов списка

  var clonedOptions = clone.getElementsByTagName("option");

// Вызов функции собирающей вызываемый список

  refreshDynamicSelectOptions(sel1, sel2, clonedOptions);

// При изменении выбранного элемента в первом списке: // вызов функции пересобирающей вызываемый список

  sel1.onchange = function() {
  refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
  }
 }
}

// Функция для сборки динамического списка

function refreshDynamicSelectOptions(sel1, sel2, clonedOptions) {

// Удаление всех элементов динамического списка

 while (sel2.options.length) {
  sel2.remove(0);
 }
 var pattern1 = /( |^)(select)( |$)/;
 var pattern2 = new RegExp("( |^)(" + sel1.options[sel1.selectedIndex].value + ")( |$)");

// Перебор клонированных элементов списка

 for (var i = 0; i < clonedOptions.length; i++) {

// Если название класса клонированного option эквивалентно "select" // либо эквивалентно значению option первого списка

  if (clonedOptions[i].className.match(pattern1) ||
  clonedOptions[i].className.match(pattern2)) {

// его нужно клонировать в динамически создаваемый список

  sel2.appendChild(clonedOptions[i].cloneNode(true));
  }
 }
}

// Вызов скрипта при загрузке страницы

window.onload = function() {
        dynamicSelect("Country", "City");
}
// ]]></script>


Sham 06-08-2010 18:38 1468376

второй window.onload перезаписывает первый, поэтому
Цитата:

Цитата Greendumb
window.onload = function() { dynamicSelect("Country", "City"); } »

это уберите, а строку
Код:

dynamicSelect("Country", "City");
засуньте в тело первого обработчика, в самый конец... имхо после placemark.balloonOpen();

Greendumb 07-08-2010 00:47 1468640

Спасибо! Вы очень помогли! Сначала не получалось, я просто сильно "расковырял" весь код, а потом отладчик файрфокса мне показал на мои "грехи" - в общем все заработало!!! Еще раз спасибо!!!


Время: 07:56.

Время: 07:56.
© OSzone.net 2001-