Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не разобрался с применением js и куки для нескольких select (https://javascript.ru/forum/misc/48392-ne-razobralsya-s-primeneniem-js-i-kuki-dlya-neskolkikh-select.html)

tart 02.07.2014 07:43

Не разобрался с применением js и куки для нескольких select
 
Здравствуйте!
Нужен совет.

Есть select с option

<select name="select" onchange="fn()">
              <option>1</option>
              <option>2</option>
              <option>3</option>
	</select>

И js

function getCookie(name) {
    var matches = document.cookie.match(new RegExp(
      "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ))
    return matches ? decodeURIComponent(matches[1]) : undefined
}       
            function setCookie(name, value, props) {
    props = props || {}
    var exp = props.expires
    if (typeof exp == "number" && exp) {
        var d = new Date()
        d.setTime(d.getTime() + exp*3153600000)
        exp = props.expires = d
    }
    if(exp && exp.toUTCString) { props.expires = exp.toUTCString() }
 
    value = encodeURIComponent(value)
    var updatedCookie = name + "=" + value
    for(var propName in props){
        updatedCookie += "; " + propName
        var propValue = props[propName]
        if(propValue !== true){ updatedCookie += "=" + propValue }
    }
    document.cookie = updatedCookie
 
}
            
            function fn(){
               var elem= document.getElementsByName('select')[0]
               var currentOptionIndex= elem.selectedIndex;
                setCookie('OptionIndex', currentOptionIndex);
            }
            
            
            window.onload=function(){
                var elem= document.getElementsByName('select')[0];
                elem.selectedIndex=getCookie('OptionIndex') || 1;
            }


Не понял как мне применить еще для одного select и option, js выше.

рони 03.07.2014 01:08

tart,
:write:
<!DOCTYPE HTML>

<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <script>
        function getCookie(name) {
            var matches = document.cookie.match(new RegExp(
                "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
            ))
            return matches ? decodeURIComponent(matches[1]) : undefined
        }

        function setCookie(name, value, props) {
            props = props || {}
            var exp = props.expires
            if (typeof exp == "number" && exp) {
                var d = new Date()
                d.setTime(d.getTime() + exp * 3153600000)
                exp = props.expires = d
            }
            if (exp && exp.toUTCString) {
                props.expires = exp.toUTCString()
            }

            value = encodeURIComponent(value)
            var updatedCookie = name + "=" + value
            for (var propName in props) {
                updatedCookie += "; " + propName
                var propValue = props[propName]
                if (propValue !== true) {
                    updatedCookie += "=" + propValue
                }
            }
            document.cookie = updatedCookie

        }

        function fn(elem) {
            setCookie(elem.name, elem.selectedIndex);

        }


        window.onload = function () {
            var elems = document.getElementsByTagName('select');
            for (var i = 0; i < elems.length; i++) {
                var elem = elems[i],
                    c = getCookie(elem.name);

                elem.selectedIndex = c !== undefined ? c : 1;
            }

        }
    </script>
</head>

<body>
    <select name="select" onchange="fn(this)">
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>
    <select name="select2" onchange="fn(this)">
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>

</body>

</html>

Globus 23.07.2014 23:45

рони, а как можно сделать, чтобы всем селектам, содержание которых берется из куков, но не является первым (selectedIndex), присваивался какой-нибудь новый класс?

рони 23.07.2014 23:54

Globus,
попробуйте самостоятельно решить этот вопрос в 52 строке if() {} ; кука есть и она не 1 то мастачим класс.

Globus 24.07.2014 00:48

рони,
Спасибо! Я пробую такую конструкцию

if(elem.selectedIndex > 0) { document.getElementsByTagName('select').AddClass('22')} ;


если индекс выбранного option не равен нулю, то присваивается класс 22

но не уверен, что эта конструкция хотя бы отчасти правильна, вас не затруднит указать на ошибку?

рони 24.07.2014 01:05

Globus,
:cray: когда доки читать начнёте

if(c !== undefined && c !== '1') {elem.className = '22'};

Globus 24.07.2014 01:50

работает! спасибо!

Globus 26.07.2014 21:00

Рони, подскажите, пожалуйста, в этого же скрипта можно ли присваивать "22" класс селекту, у которого индекс option перестал быть равным = '1' ?

Globus 27.07.2014 20:56

А главное - Важный вопрос: можно ли, чтобы куки с каждого селекта записывались не при onchange="fn()" , а при нажатии на одну кнопку, например, <input type="button" name="save" value="saveall"> ?

рони 27.07.2014 21:00

Globus,
можно сделайте циклом обход селектов ... сам сам ... пора уже


Часовой пояс GMT +3, время: 16:41.