Jump to content

Sserg-135

User
  • Posts

    146
  • Joined

  • Last visited

Posts posted by Sserg-135

  1. суть в том, что у меня не получается определить значение (опцию) динамически наполняемого селекта к моменту  (или во время)  загрузки страницы. Т.е. скрипты, которые исполняются во время загрузки страницы не могут еще получить состояние селекта ( т.е. он для них еще стоит на нулевой опции). Но визуально , когда страница уже отображается браузером, то я вижу что селект стоит на выбранной ("правильной" ) опции. Получается что когда происходит событие готовности документа, то селект просто существует, но не установлен на нужную опцию. Хотя функция которая заполняет селект и  устанавливает его на нужную опцию  по идее уже отработала ( я ее вызываю перед тем как считывать состояние селекта)

  2. Бьюсь несколько дней не могу понять:

    Есть скрипт на JS которым наполняю список <select> при загрузке страницы

    document.getElementById(Id).options[num_option]=new Option(result[i]['Model'],result[i]['code_model'],false,false);

    где result  это массив который заполняется из Mysql  с помощью AJAX

    Далее через Jquery выбираю опцию которую делаю выбранной:

    $("#"+Id+" :contains("+model+")").attr("selected", "selected");$("#"+Id+" :contains("+model+")").prop("selected", true);

    Где model это переменная с текстовым значением  выбранной опции ( Хотя это не принципиально т.к. при выборе установки по значению value все то-же самое о чем пойдет речь ниже).

    Так вот суть трабла:  мне нужно узнать  значение выбранной опции списка и передать его  в функцию которая исполняется после установки данного селекта:

     

    document.getElementById('Id').value  –  мне всегда возвращает значение первой опции как и $('#Id’ option:selected').val(), хотя сам список благополучно заполняется и стоит на правильно выбранной опции.

    Причем если я перед этим напишу alert(‘xxx’), т.е.  alert(‘xxx’);  document.getElementById('Id').value  то получаю правильное значение выбранной опции. Такое впечатление что нет готовности установки селекта.

    Хотя если подобный список сформировать например силами PHP т.е. не динамически то все опции определяются правильно.

    Для чего мне это нужно – чтобы установить  взаимосвязанные списки на значение полученное из переменной URL.

    Я конечно могу передать в ту функцию значение непосредственно из URL,  НО: 1) хочется разобраться что за хрень : ))) и 2)  для установки цепочки взаимосвязанных селектов и событий, красивее и удобнее в программировании использовать обращение через значения самих селектов.

    Кстати попытки дождаться готовности событий типа

    $(document).ready(function () {document.getElementById('Id').valueИ здесь  считывать значения селектов});$(windows).load(function () {document.getElementById('Id').valueИ здесь  считывать значения селектов});

    Приводят к тому-же результату- т.е  селект как-бы «все еще на первой опции»

     

    Вот собственно )

    Что я делаю неправильно? Помогите пожалуйста

     

     

  3. Правда почему-то при загрузке с первого клика не работает...

    Потому что block.style.display изначально - пустая строка. block.style - это то, что назначено непосредственно через атрибут style элемента. Поглядите в DOM-инспекторе, там это прекрасно видно.

    Не совсем понятно почему так выходит. Т.е в данном случае свойство display нужно прописывать непосредственно в тэге <div style='display: none;'> ?

  4. Форумчане, правильно ли я понимаю технологию создания появляющегося слоя в центре странички (например как на этом форуме, когда кликаешь ссылку Регистрация или когда кликаешь на иконки BB кодов при оформлении новой темы ;) ):

    Шаг1: Где-нибудь в теле HTML странички (в любом месте по сути?) создаем отцентрированный слой по принципу описанному например в http://htmlbook.ru/l...u-veb-stranitsy со свойством display:none и с нужным содержанием

    Шаг 2: на JS пишем коротенкую функцию, которая при клике на ссылку, по которой нужно открыть этот слой, меняет свойство слоя display:visible и ставит z-index 100000, чтобы слой был поверх всего.

    Так правильно? или весь слой надо формировать исключительно средствами JS?

    И как тогда делается эффект затемнения "нижележащих" слоев? через слой с полупрозрачным фоном, через opacity или полупрозрачныу картинку в фоновом рисунке формата png?А эффект небольшой тени только по периметру слоя?

    Буду рад подсказкам :-)

    Спасибо

  5. Помогите правильно написать скрипт, делающий следующее:

    Мне нужно в зависимости от выбранного из списка select как-бы "перенести" размещение поля ввода input из одной части таблицы в другую (например их одной из нижних ячеек в одну из верхних). Но при этом чтобы имя переменной было одно (так удобнее для дальнейшей записи в БД).

    Наиболее простой способ вижу таким:

    создаю два идентичных тэга input в требуемых ячейках c одинаковыми name, но с разным значением свойства display и и затем скриптом меняю, невидимую на block.style.display = ""; видимую на block.style.display = "none"; Вопрос: корректно ли передадуться на сервер значения переменной (формально же их две с одним именем) и вообще корректо-ли так делать? Нужно ли еще добавить смену свойства disable?. Или вообще так не делают?

  6. Добрый день

    Помогите с составлением запроса группировки, но с такой особенностью:

    Есть таблица, которую нужно сгруппировать по значению определенного столбца (с подсчетом кол-ва). Само по себе это понятно просто и вопросов не вызывает

    т.е. как-то так:

    SELECT var_1, COUNT(*) AS qlt FROM table_1 LEFT JOIN `table_2` ON table_1.code=`table_2`.CODE  GROUP BY table_1.code ORDER BY var_2--

    но есть нюанс: нужно чтобы строки со значением code='' (т.е.пустое поле) и со значением code=-1 попали в одну группу и соответственно подсчитались вместе как одна группа.

    Как можно это составить в одном запросе, если можно конечно.

    Я пока кроме как сделать дополнительно к основному еще два запроса с условиям по:

     WHEN table_1.code=-1 

    или с

    HAVING table_1.code=-1 

    , а затем

    HAVING table_1.code=''

    , а затем объединить итоговые массивы не придумал.

    Хотелось бы в одном запросе- чтоб красиво было)

  7. Great Rash, теперь все сделал: опции добавляю через

    document.getElementById(Id).options[num_option]=new Option('name','value', false, false);

    а оптогруппы как в Вашем последнем коде через :

     document.getElementById(Id).appendChild(group);

    пока работает и в лисе и в осле и в хроме

    Еще раз спасибо!

  8. пока пришел к выводу, что IE не хочет создавать подряд optgroup-ы через JS, между ними должен находится тэг <option value=nnn >...</option>, причем не созданный через скрипт JS (я его создаю таким кодом:

    document.getElementById(Id).options[num_option]=new Option('опция N',value,false,false))

    , а написанный непосредственно в html.

    такая вот ерунда выходит

  9. И опять оказалось не все так просто )

    создаю опции Select и оптогруппы в цикле:

    for (i=0; i<result.length; i++)
    { .
    .
    .
    // Выделяем признак оптгруппы
    if (result[i]['code']=='***'){
    //** создание optgroup
    var optgroup = document.createElement('optgroup');
    optgroup.label = result[i]['neighborhood']; // тэг label. заголовок оптгруппы
    try {
    // IE6(7)
    document.getElementById(Id).add(optgroup, document.getElementById(Id).options[null]);
    } catch (e) {
    document.getElementById(Id).add(optgroup, null);
    }
    }
    }

    В FF все прекрасно создается, а в IE создается только одна- самая первая optgroup, а которые идут дальше цикле полностью игнорируются. Делаю все тоже самое без цикла (просто ставлю подряд два куска этого кода друг за другом с разными названиями optgroup.label ) и тоже создается только первая оптгруппа, а вторая (т.е. последующие) игнорируется.

    В чем может быть проблема?

    И кстати в Гугль-Хроме этот код совсем не работает

  10. помог такой код:

    var sel = document.getElementById(Id);
    while (sel.childNodes.length) {
    if (sel.firstChild.tagName == 'OPTGROUP') {
    while (sel.firstChild.childNodes.length) {
    sel.firstChild.removeChild(sel.firstChild.firstChild);
    }
    }
    sel.removeChild(sel.firstChild);
    }

    полная очистка списка

  11. Рано радовался :facepalmxd:

    теперь проблема очистить список от оптогрупп )))))

    ибо

    document.getElementById(Id).options.length=0

    очищает только элементы списка, но никак не оптогруппы)

    что нужно для этого сделать?

  12. Получилась-таки оптогруппа, просто т.к. она пока без названия, то FF ее просто не отобразил, а плагин Firebug в коде страницы ее уже показывает.

    код практически такой-же, как написал Great Rash.

    var optgroup = document.createElement('optgroup');
    try {
    // IE6(7)
    document.getElementById(Id).add(optgroup, document.getElementById(Id).options[null]);
    } catch (e) {
    document.getElementById(Id).add(optgroup, null);
    }

    Спасибо.

    А вот с названием оптогруппы (тэг LABEL)не совсем понял как установить. (если через setAttribute, то какой будет синтаксис?)?

    помогите еще чуть-чуть)

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy