Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.10.2022, 15:06
Новичок на форуме
Отправить личное сообщение для wainzor Посмотреть профиль Найти все сообщения от wainzor
 
Регистрация: 01.06.2022
Сообщений: 6

Сброс кастомного селекта
Всем привет! Есть обычный селект
<select class="select" name="referrer">
                    <option value="">Значение1</option>
                    <option value="1">Значение2</option>
                    <option value="2">Значение3</option>
                  </select>


Который для кастомизации с помощью js преобразован в список
$('.select').each(function(){
  // Variables
  var $this = $(this),
    selectOption = $this.find('option'),
    selectOptionLength = selectOption.length,
    selectedOption = selectOption.filter(':selected'),
    dur = 500;

  $this.hide();
  // Wrap all in select box
  $this.wrap('<div class="select"></div>');
  // Style box
  $('<div>',{
    class: 'select__gap',
    text: 'Значение По Умолчанию'
  }).insertAfter($this);
  
  var selectGap = $this.next('.select__gap'),
    caret = selectGap.find('.caret');
  // Add ul list
  $('<ul>',{
    class: 'select__list'
  }).insertAfter(selectGap);		

  var selectList = selectGap.next('.select__list');
  // Add li - option items
  for(var i = 0; i < selectOptionLength; i++){
    $('<li>',{
      class: 'select__item',
      html: $('<span>',{
        text: selectOption.eq(i).text()
      })				
    })
    .attr('data-value', selectOption.eq(i).val())
    .appendTo(selectList);
  }
  // Find all items
  var selectItem = selectList.find('li');

  selectList.slideUp(0);
  selectGap.on('click', function(){
    if(!$(this).hasClass('on')){
      $(this).addClass('on');
      selectList.slideDown(dur);

      selectItem.on('click', function(){
        var chooseItem = $(this).data('value');

        $('select').val(chooseItem).attr('selected', 'selected');
        selectGap.text($(this).find('span').text());

        selectList.slideUp(dur);
        selectGap.removeClass('on');
      });
      
    } else {
      $(this).removeClass('on');
      selectList.slideUp(dur);
    }
  });		

});


Вопрос, как сделать кнопку reset при нажатии на которую будет происходить сброс выбранных значений до значения по умолчанию. Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 14.10.2022, 16:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

кастомизация селекта
wainzor,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        .select__item.active {
            background-color: #DCDCDC;
        }
    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script>
        $(function() {
            $('.select').each(function() {
                // Variables
                var $this = $(this),
                    selectOption = $this.find('option'),
                    selectOptionLength = selectOption.length,
                    selectedOption = selectOption.filter(':selected'),
                    dur = 500;
                if (!selectedOption.length) selectedOption.eq(0);
                $this.hide();
                // Wrap all in select box
                $this.wrap('<div class="select"></div>');
                // Style box
                $('<div>', {
                    class: 'select__gap',
                    text: selectedOption.text()
                }).insertAfter($this);

                var selectGap = $this.next('.select__gap'),
                    caret = selectGap.find('.caret');
                // Add ul list
                $('<ul>', {
                    class: 'select__list'
                }).insertAfter(selectGap);

                var selectList = selectGap.next('.select__list');
                var defaultLi;
                // Add li - option items
                for (var i = 0; i < selectOptionLength; i++) {
                    let selected = selectOption.eq(i)[0] === selectedOption[0];
                    let cls = selected ? 'select__item active default' : 'select__item';
                    let li = $('<li>', {
                            class: cls,
                            html: $('<span>', {
                                text: selectOption.eq(i).text()
                            })
                        })
                        .attr('data-value', selectOption.eq(i).val())
                        .appendTo(selectList);
                    if (selected) defaultLi = li;
                }
                $this.on('reset', function() {
                    defaultLi.click()
                })
                // Find all items
                var selectItem = selectList.find('li');

                selectList.slideUp(0);
                selectGap.on('click', function() {
                    if (!$(this).hasClass('on')) {
                        $(this).addClass('on');
                        selectList.slideDown(dur);

                        selectItem.on('click', function() {
                            var chooseItem = $(this).data('value');

                            $this.val(chooseItem);
                            selectGap.text($(this).find('span').text());
                            selectItem.removeClass('active');
                            $(this).addClass('active');

                            selectList.slideUp(dur);
                            selectGap.removeClass('on');
                        });

                    } else {
                        $(this).removeClass('on');
                        selectList.slideUp(dur);
                    }
                });

            });

            $('button').on('click', function() {
                $('[name="referrer"]').trigger('reset');
            })

        });
    </script>
</head>

<body>
    <select class="select" name="referrer">
                    <option value="">Значение1</option>
                    <option value="1">Значение2</option>
                    <option value="2" selected="selected">Значение3</option>
                  </select>
    <button>reset</button>
</body>

</html>
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор селекта подставляет в инпут espltd Элементы интерфейса 7 10.06.2015 14:37
сброс селекта при перезагрузке в FireFox Sergei-b84 Элементы интерфейса 2 30.06.2014 16:44
Соединение двух частей одного селекта imediasun1 Общие вопросы Javascript 1 06.02.2013 20:56
Как заставить меняться стиль option одного селекта в зависимости от выбора option.. print_r Общие вопросы Javascript 1 08.01.2013 23:11
Подстановка значений селекта solomon2 Элементы интерфейса 4 06.05.2012 17:24