Javascript: Cookies, Select Boxes и «document.getElementById» не работают в Internet Explorer - PullRequest
2 голосов
/ 09 августа 2011

После множества проб и ошибок мне удалось создать несколько раскрывающихся списков, чтобы сохранить значение выбора пользователя в файле cookie и предварительно выбрать его из файлов cookie ...

... но не в IE. Мои функции установки файлов cookie достаточно просты. У меня есть два поля выбора с именами и идентификаторами «Sol» и «Pro». Я вызываю перечисленные ниже функции, когда соответствующее поле выбора onChanges и (в идеале) solCookie и proCookie создаются с одним целым числом, представляющим индекс всего, что выбрал пользователь.

function setSol() {
    document.cookie= "solCookie=" + document.getElementById('sol').selectedIndex;
    }
function setPro() {
    document.cookie= "proCookie=" + document.getElementById('pro').selectedIndex;
    }

Chrome 13 доволен этим, Firefox 5 хочет играть хорошо, но нет! IE9 не будет иметь ничего из этого!

ie hates cookies

http://imgur.com/a/yOrGd (Альбом других примеров браузера для файлов cookie)

^ Это проблема. ^

Похоже, что IE сохраняет всю строку кода в cookie. Как я могу это исправить? Имейте в виду, я довольно новичок в JavaScript и кодировании в целом. Очень ценится!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Рабочий процесс, более подробно: Блоки выбора (решения) и выбора (протока) в конечном итоге являются фильтрами. Различные продукты подразделяются на решения, родственные отношениям между городами. Вот поля выбора.

<select name="sol" id="sol" size="1" style="margin-bottom: 0px;" onchange="setSol();populate(this)"> 
    <option value="Choose a Solution">Choose a solution...</option>
    <option value="Option One">Option One</option>
    <option value="Option Two">Option Two</option>
    <option value="Option Three">Option Three</option>
</select> 
<select name="pro" id="pro" size="1" style="width: 323px; margin-bottom: 0px;" onchange="setPro();javascript:_SFSUBMIT_"> 
</select>

Как вы можете видеть, когда пользователь выбирает параметр в «sol», он вызывает setSol (), который устанавливает cookie «solCookie», а затем вызывает populate () (не указан), который заполняет «pro» другими опции. Как только пользователь выбирает параметр в этом, proCookie сохраняется через setPro (), форма отправляется, и страница обновляется.

Вот моя функция выбора файлов cookie для поиска / выбора. После обновления страницы эта функция вместе с практически идентичной функцией getSol () запускается onLoad, заполняя поля выбора тем, что было в файле cookie.

function getPro(cookie_name) {
    if (document.cookie); {
        index = document.cookie.indexOf("proCookie");
        if (index != -1) {
            namestart = (document.cookie.indexOf("=", index) + 1);
            nameend = document.cookie.indexOf(";", index);
            if (nameend == -1) {
                nameend = document.cookie.length;
                }
            var selPro = document.cookie.substring(namestart,nameend);
            selPro = parseInt(selPro);
            }
        document.getElementById('pro').options[selPro].selected = true;
        }
    }

1 Ответ

0 голосов
/ 23 января 2013

Попробуйте установить срок действия файла cookie.Я никогда не видел код установки cookie, который по крайней мере не передает ему пустую строку.

function setSol() {
    var date  = new Date();
    var tomorrow = new Date(date.getTime() + 24*60*60*1000);
    document.cookie= "solCookie=" + document.getElementById('sol').selectedIndex + "; expires=" + tomorrow.toUTCString();
}
...