Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Активация/сброс множественного фильтра

Активация/сброс множественного фильтра


     12.05.2014    Общие вопросы, jQuery    4081

вопрос
Всем привет!
Поставил множественный поиск по доп.полям и тут нужно довести его до ума, но что-то не выходит.
Нужно чтобы при выборе нескольких категорий после поиска выбранные категории остались активными.
Также чтобы мошна было нажать на кнопку для сброса всего фильтра тем самым возвращал весь список новостей.
Фильтр работает хорошо, но вот после нажатия (найти) все выбранные категории не выделяются.
Вот пример выбранных категорий как я хотел бы сделать.
Активация/сброс множественного фильтра

Использую такую разметку

<div style="padding:10px;text-align:center" class="form-filter">
    <form action="/" name="search_xf" method="get">    
        <input type="hidden" name="do" value="search_xf" />
        <input type="hidden" name="loc" value="1" />
Жанр:        
<input type="checkbox" class="styled" name="genre" value="комедия" /> <span onclick="CheckClick(this)" class="hand">комедия</span><br/>
<input type="checkbox" class="styled" name="genre" value="боевик" /> <span onclick="CheckClick(this)" class="hand">боевик</span><br/>
<input type="checkbox" class="styled" name="genre" value="фантастика" /> <span onclick="CheckClick(this)" class="hand">фантастика</span><br/>
<input type="checkbox" class="styled" name="genre" value="ужасы" /> <span onclick="CheckClick(this)" class="hand">ужасы</span>
<br/><br/><br/>
Год:
<input type="checkbox" class="styled" name="year" value="2000" /> <span onclick="CheckClick(this)" class="hand">2000</span><br/>
<input type="checkbox" class="styled" name="year" value="1999" /> <span onclick="CheckClick(this)" class="hand">1999</span><br/>
<input type="checkbox" class="styled" name="year" value="1988" /> <span onclick="CheckClick(this)" class="hand">1988</span><br/>
<input type="checkbox" class="styled" name="year" value="1977" /> <span onclick="CheckClick(this)" class="hand">1977</span>
        
        <input type="submit" class="xfsub" value=" Поиск " />
    </form>
</div>
<script>
function CheckClick(e){
   t=e.previousSibling.previousSibling;
   if( (t.tagName=='input')&&(t.type=='checkbox')) t.click();
}
</script>
<style type="text/css">
.hand {cursor:pointer;}
</style>

Ответа пока нет


13 комментариев

monach
Юзер

monach - 12 мая 2014 03:09 -

Всем доброй ночи!
Я нашел способ как сделать активными checkbox.Но вот и тут у меня возникли трудности.
При выборе несколько checkbox и нажатии искать все они остаются активными, но если снять один checkbox, то после обновления страницы все стают не активными.
Я понял, что проблема возникает потому что у меня одинаковые name="genre" но одинаковые name мне и нужны так-как это название доп.поля также присутствуют одинаковые и year...
вот моя разметка

<div style="padding:10px;text-align:center" class="form-filter">
    <form action="/" name="search_xf" method="get" id="boxlawreg">    
        <input type="hidden" name="do" value="search_xf" />
        <input type="hidden" name="loc" value="1" />
    
<label class="lab_check"><input type="checkbox" name="genre" class="check" value="комедия"><span>комедия</span></label>
<label class="lab_check"><input type="checkbox" name="genre" class="check" value="романтика"><span>романтика</span></label>
        <input type="submit" class="xfsub" value=" Поиск " />
    </form>
</div>

<script type="text/javascript">
//===== Cookies Plugin=====   //

(function ($) {
            $.cookie = function (key, value, options) {

                // key and at least value given, set cookie...
                if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
                    options = $.extend({}, options);

                    if (value === null || value === undefined) {
                        options.expires = -1;
                    }

                    if (typeof options.expires === 'number') {
                        var days = options.expires, t = options.expires = new Date();
                        t.setDate(t.getDate() + days);
                    }

                    value = String(value);

                    return (document.cookie = [
                encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
                options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
                options.path ? '; path=' + options.path : '',
                options.domain ? '; domain=' + options.domain : '',
                options.secure ? '; secure' : ''
            ].join(''));
                }

                // key and possibly options given, get cookie...
                options = value || {};
                var decode = options.raw ? function (s) { return s; } : decodeURIComponent;

                var pairs = document.cookie.split('; ');
                for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
                    if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
                }
                return null;
            };
        })(jQuery);

//======================================//

  $(document).ready(function () {
            var checkbox = $('#boxlawreg').find(':checkbox'), checkboxCookieName = 'checkbox-state';

            checkbox.each(function () {
                $(this).attr('checked', $.cookie(checkboxCookieName + '|' + $(this).attr('name')));
            });

            checkbox.click(function () {                
                $.cookie(checkboxCookieName + '|' + $(this).attr('name'), $(this).prop('checked'));
            });
        });
</script>

Как отредактировать для правильной работы скрипта?

monach
Юзер

monach - 12 мая 2014 15:03 -

Всем привет!Ребята есть кто может помочь?

monach
Юзер

monach - 12 мая 2014 21:06 -

Может есть другой способ сделать активными выбранные категории в фильтре?Помогите пожалуйста.Может как-то вносить в куки выбранное.Я предполагаю что корректней будет работать если все сделать на php

lutskboy
Эксперт

lutskboy - 12 мая 2014 21:30 -

проверяй какой урл через гет метод и прописывай например класс актив для етих категорий

monach
Юзер

monach - 12 мая 2014 21:46 -

Извините пожалуйста!Можете скинуть пример?

lutskboy
Эксперт

lutskboy - 13 мая 2014 14:14 -

напишите пример ссылки в адресной строке браузера если я например выбрал боевик, и комедия.

monach
Юзер

monach - 13 мая 2014 17:34 -

lutskboy,
Вот как выводит ссылку

http://movia-films/sf/genre:%F0%EE%EC%E0%ED%F2%E8%EA%E0/genre:%F0%EE%EC%E0%ED%F2%E8%EA%ED/

lutskboy
Эксперт

lutskboy - 14 мая 2014 12:36 -

Разве не вам я этот модуль поправлял? Он не правильно немного выводит инфу

monach
Юзер

monach - 14 мая 2014 13:11 -

Я сам его подправил.

lutskboy
Эксперт

lutskboy - 14 мая 2014 13:16 -

ну и славно

leon
Юзер

leon - 14 мая 2014 20:16 -

Цитата: lutskboy
проверяй какой урл через гет метод и прописывай, например, класс актив для этих категорий

У меня точно также выводится
http://Мой сайт/sf/genre:%F0%EE%EC%E0%ED%F2%E8%EA%E0/genre:%F0%EE%EC%E0%ED%F2%E8%EA%ED/
, что нужно сделать чтобы выводилось понятное имя категории в адресной строке? Я заменил выпадающий список на checkbox как сделал автор вопроса. Вы не могли бы написать, как именно можно реализовать?
Если не затруднит написать пример.
Если выбрано будет допустим 7 категорий с доп. поля (ganre) то и ссылка станет огромной, как тогда задавать класс актив этим категориям? А и если к тем же категориям выбрать несколько пунктов с доп. поля (year) допустим 2013,2014,2010 то строка станет ссылки очень большой.Помогите пожалуйста мне тоже очень интересен данный метод.

rocksmart
Юзер

rocksmart - 14 мая 2014 21:15 -

Через пост надо передавать

leon
Юзер

leon - 14 мая 2014 21:39 -

rocksmart,
Буду очень благодарен если вы напишите как это можна передать в пост.Я просто не понимаю пока в php и js/

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх