ФорумПрограммированиеJavaScript → Трабла с ИЕ + SELECT + AJAX

Трабла с ИЕ + SELECT + AJAX

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 18 декабря 2007 г. 15:56

    На сайте организовано меню на АЯКСе, использую библиотеку JsHttpRequest.
    Вот сайт http://auto.uniwebs.ru/

    Когда заходишь с FireFox, Opera, Safari - Все ништяк работает, выбираешь "Грузовые автомобили", выпадает список в соседнем селекте!
    Но блин ИЕ как всегда… все засрет… Заходим с ИЕ и ничерта не работает это меню!

    Внимание: Не пугайтесь нижней консоли (если заходишь не с ФФ! И в опере он открывается не корректно) - это "FireBug Lite". + из-за него ошибка одна в валидации, но это не суть.

    1. Проверил JsHttpRequest - он данные отправляет и принимает! + пробовал alert(), все работает, данные приходят!
    2. Вместо SELECT использовал DIV и все получилось, данные туда вставляються! А в СЕЛЕКТ - НЕТ!
    Верстка - валидна, JS - нет ошибок.

    Что это может быть такое с ИЕ? или с селектом?
    adw/0
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 1:09, спустя 9 часов 13 минут

    как ты вставляешь в селект?
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 1:33, спустя 23 минуты 30 секунд


    как ты вставляешь в селект?


    использую SELECT как блок

    <select name="year_2" id="year_2" style="width: 54px;">
    <option selected="true" value="2007">2007</option>
    <option value="2006">2006</option>
    </select>


    беру и по ид заменяю содержимое, то есть блок:

    <option selected="true" value="2007">2007</option>
    <option value="2006">2006</option>


    таким образом: document.getElementById(имя_ид).innerHTML = то_что_вернул_бакенд;
    adw/0
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 1:42, спустя 9 минут 36 секунд

    на сколько мне известно, в select надо вставлять так:


    var List = document.forms["FORM_NAME"].elements["SELECT_NAME"];

    var newOption = document.createElement("OPTION");
    newOption.text = 'name';
    newOption.value = 'value';

    // тут мы используем для добавления элемента либо метод IE, либо DOM
    (List.options.add) ? List.options.add(newOption) : List.add(newOption, null);


    т.е. надо создавать элементы <option>

    вобщем, гуру js ща помогут…
    все умрут, а я изумруд
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 1:43, спустя 46 секунд

    ps. не знал, что select можно использовать "как блок"
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 2:37, спустя 54 минуты 25 секунд

    md5 спасибо большое, конечно сложноватое решение, подожду vasa_c :)
    adw/0
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 2:41, спустя 4 минуты

    По сути md5 предложил правильный подход. Но на самом деле все еще проще, можно обойтись без DOM:

    document.forms["FORM_NAME"].elements["SELECT_NAME"].options - это просто массив. Ну и работай с ним как с массивом.
    document.forms["FORM_NAME"].elements["SELECT_NAME"].options.text - содержимое конкретнеого <option>
    document.forms["FORM_NAME"].elements["SELECT_NAME"].options.value - аттрибут value конкретнеого <option>

    Будет работать везде.

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 3:28, спустя 46 минут 27 секунд


    По сути md5 предложил правильный подход. Но на самом деле все еще проще, можно обойтись без DOM:

    document.forms["FORM_NAME"].elements["SELECT_NAME"].options - это просто массив. Ну и работай с ним как с массивом.
    document.forms["FORM_NAME"].elements["SELECT_NAME"].options.text - содержимое конкретнеого <option>
    document.forms["FORM_NAME"].elements["SELECT_NAME"].options.value - аттрибут value конкретнеого <option>

    Будет работать везде.




    спасиб, так удобнее и яснее :)
    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 3:31, спустя 3 минуты 20 секунд

    подожду vasa_c

    :)))
    ничего нового сказать не могу.
    innerHTML в IE далеко не везде правильно работает на запись.
    Поэтому вместо него приходится использовать DOM.
    Либо современные уровни, как у md5.
    Либо несколько устаревшие, как у AlexB.

    + Интерфейс HTMLSelectElement
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 3:52, спустя 20 минут 57 секунд

    vasa_c, тест
    =) добавил стрелочку вниз дабы вставлять имя юзера в форму ответа, сори за флейм =)
    почему раньше не сделали?
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 3:54, спустя 1 минуту 58 секунд

    Всем спасибо :)

    P.S. vasa_c спасибо за ссылку :)
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 3:55, спустя 38 секунд


    vasa_c, тест
    =) добавил стрелочку вниз дабы вставлять имя юзера в форму ответа, сори за флейм =)
    почему раньше не сделали?

    удобно :)

    тока вставлятся не нынешний, никнейм а который был при регистрации :(
    т.е. вставляется ad3000 а надо adw0rd
    adw/0
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 19 декабря 2007 г. 3:57, спустя 2 минуты 8 секунд

    adw0rd, ага, поправил ;)
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 6 января 2008 г. 7:29, спустя 18 дней 3 часа 31 минуту

    Кстати, сделал как посоветовал md5!
    Получал JSON запись из бекенда, потом его евалил в объект, очищал селект при помощи innerHTML, и добавлял туда новые записи как посоветовал md5.
    Но код на стороне клиента разросся, поэтому переделал по старинке - с использованием дивов :)
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!