Javascript: файлы cookie, поля выбора и «document.getElementById» не работают в Internet Explorer

После множества проб и ошибок мне удалось сохранить в нескольких раскрывающихся списках значение выбора пользователя в файле 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 этого не будет!

т.е. ненавидит файлы cookie

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, заполняя поля выбора тем, что было в куки.

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;
        }
    }

person Brian    schedule 09.08.2011    source источник
comment
+1 за детали в вопросе ... приятно ....   -  person Manse    schedule 29.11.2011
comment
Это может показаться очевидным, но забываются и очевидные вещи: вы проверяли, включены ли куки?   -  person user2428118    schedule 19.11.2012


Ответы (1)


Попробуйте установить срок действия файла 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();
}
person Juan Mendes    schedule 23.01.2013