Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2018, 10:10
Интересующийся
Отправить личное сообщение для max1985 Посмотреть профиль Найти все сообщения от max1985
 
Регистрация: 03.07.2018
Сообщений: 25

Выбор конкретных дней вместо диапазона
Здравствуйте!
Есть скрипт который позволяет выбрать диапазон дней для расчета программы питания
var firstDay = 0;
var lastDay = 6;
$('.builder-days-selector a').on('click', function(event) {
    var active = $('.builder-days-selector').find('.active').length;

    if (active === 0) {
        $(event.target.closest('a')).addClass('active');
        firstDay = $(event.target.closest('a')).attr('data-slide-index');
    } else if (active === 1) {
        lastDay = firstDay;
        $(event.target.closest('a')).attr('data-slide-index') > firstDay
            ? lastDay = $(event.target.closest('a')).attr('data-slide-index')
            : firstDay = $(event.target.closest('a')).attr('data-slide-index');

        for (var i = firstDay; i <= lastDay; i++) {
            $("a[data-slide-index=" + i + "]").addClass('active');
        }
    } else {
        $('.builder-days-selector a').removeClass('active');
        $(event.target.closest('a')).addClass('active');
        firstDay = $(event.target.closest('a')).attr('data-slide-index');
        lastDay = firstDay;
    }
});

<div class="custom-pager builder-days-selector">
            <a class="active" data-slide-index="0"> <!--                class = "active"-->
                <span class="pager-title">
                    Пн
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="1">
                <span class="pager-title">
                    Вт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="2">
                <span class="pager-title">
                    Ср
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="3">
                <span class="pager-title">
                    Чт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="4">
                <span class="pager-title">
                    Пт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="5">
                <span class="pager-title">
                    Сб
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="6">
                <span class="pager-title">
                    Вс
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>
        </div>

Как его переделать чтоб можно было выбирать только конкретные дни?
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2018, 10:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

max1985,
результат какой должен быть?
Ответить с цитированием
  #3 (permalink)  
Старый 28.08.2018, 10:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от рони
результат какой должен быть?
... тихо сам с собою ... предположим, что результат, это массив индексов

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <style type="text/css">
   .active{
       background-color: rgba(255, 0, 0, 1);
       color: rgba(255, 255, 255, 1);
   }

  </style>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

</head>

<body>
<div class="custom-pager builder-days-selector">
            <a class="active" data-slide-index="0"> <!--                class = "active"-->
                <span class="pager-title">
                    Пн
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="1">
                <span class="pager-title">
                    Вт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="2">
                <span class="pager-title">
                    Ср
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="3">
                <span class="pager-title">
                    Чт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="4">
                <span class="pager-title">
                    Пт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="5">
                <span class="pager-title">
                    Сб
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="6">
                <span class="pager-title">
                    Вс
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>
        </div>
        <div class="out"></div>
<script>
$(function() {
var dayActive = [], parent = $('.builder-days-selector'), out = $('.out');
parent.on('click', 'a',function(event) {
    event.preventDefault();
    $(this).toggleClass('active');
    var active = parent.find('.active');
    dayActive = $.map(active, function(el) {
   return  $(el).data('slide-index')
})
    out.text(dayActive)
});
parent.find('a:first').trigger('click').trigger('click');
});
</script>
</body>

</html>
Ответить с цитированием
  #4 (permalink)  
Старый 28.08.2018, 11:27
Интересующийся
Отправить личное сообщение для max1985 Посмотреть профиль Найти все сообщения от max1985
 
Регистрация: 03.07.2018
Сообщений: 25

Спасибо большое за помощь!
Визуально отображается как надо, но расчет не ведется.
Ответить с цитированием
  #5 (permalink)  
Старый 28.08.2018, 11:34
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

max1985,
Расчетом какой скрипт занимается?
Ответить с цитированием
  #6 (permalink)  
Старый 28.08.2018, 11:46
Интересующийся
Отправить личное сообщение для max1985 Посмотреть профиль Найти все сообщения от max1985
 
Регистрация: 03.07.2018
Сообщений: 25

Видимо то что в самом вверху
т.к если поменять в скрипте и коде:
builder-days-selector на builder-days-selector1
и
data-slide-index на data-slide-index1
то все продолжает работать...

Последний раз редактировалось max1985, 28.08.2018 в 11:48.
Ответить с цитированием
  #7 (permalink)  
Старый 28.08.2018, 13:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

max1985,
ждите телепатов
Ответить с цитированием
  #8 (permalink)  
Старый 28.08.2018, 14:01
Интересующийся
Отправить личное сообщение для max1985 Посмотреть профиль Найти все сообщения от max1985
 
Регистрация: 03.07.2018
Сообщений: 25

Готов заплатить за доработку...
Необходимо чтоб получилось так https://prnt.sc/knrqo2
1. При нажатии на радиокнопку становятся активными элементы на против нее, а в противоположном блоке выбрать ничего нельзя и на всех элементах снимается active, пока не переключить радиокнопку.
2. Первый вариант выбирает диапозон, второй конкретные дни.
3. Должно работать на основании имеющегося скрипта.
Сейчас у меня так:
<div class="row">
<form>
    <div class="col-md-12 text-center builder-days-title">
        <i class="fa fa-arrow-down"></i>
        <span> Выбор диапазон расчета программы питания </span>
        <i class="fa fa-arrow-down"></i>
    </div>
	<input type="radio" name="gender" id="Choice1" value="Choice1" checked>
    <div class="col-md-12">
        <div class="custom-pager builder-days-selector">
            <a class="active" data-slide-index="0"> <!--                class = "active"-->
                <span class="pager-title">
                    Пн
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="1">
                <span class="pager-title">
                    Вт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="2">
                <span class="pager-title">
                    Ср
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="3">
                <span class="pager-title">
                    Чт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="4">
                <span class="pager-title">
                    Пт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="5">
                <span class="pager-title">
                    Сб
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a class="active" data-slide-index="6">
                <span class="pager-title">
                    Вс
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>
        </div>
    </div>
	<br /><br />
	<div class="col-md-12 text-center builder-days-title">
        <i class="fa fa-arrow-down"></i>
        <span> Выбор конкретных дней для расчета программы питания </span>
        <i class="fa fa-arrow-down"></i>
    </div>
	<input type="radio" name="gender" id="Choice2" value="Choice2">
    <div class="col-md-12">
        <div class="custom-pager builder-days-selector1">
            <a data-slide-index1="0">
                <span class="pager-title">
                    Пн
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a data-slide-index1="1">
                <span class="pager-title">
                    Вт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a data-slide-index1="2">
                <span class="pager-title">
                    Ср
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a data-slide-index1="3">
                <span class="pager-title">
                    Чт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a data-slide-index1="4">
                <span class="pager-title">
                    Пт
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a data-slide-index1="5">
                <span class="pager-title">
                    Сб
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>

            <a data-slide-index1="6">
                <span class="pager-title">
                    Вс
                </span>
                <span class="circle">
                    <span class="inner-circle"></span>
                </span>
            </a>
        </div>
		
    </div>
</form>	
</div>

var firstDay = 0;
var lastDay = 6;
$('.builder-days-selector a').on('click', function(event) {
    var active = $('.builder-days-selector').find('.active').length;

    if (active === 0) {
        $(event.target.closest('a')).addClass('active');
        firstDay = $(event.target.closest('a')).attr('data-slide-index');
    } else if (active === 1) {
        lastDay = firstDay;
        $(event.target.closest('a')).attr('data-slide-index') > firstDay
            ? lastDay = $(event.target.closest('a')).attr('data-slide-index')
            : firstDay = $(event.target.closest('a')).attr('data-slide-index');

        for (var i = firstDay; i <= lastDay; i++) {
            $("a[data-slide-index=" + i + "]").addClass('active');
        }
    } else {
        $('.builder-days-selector a').removeClass('active');
        $(event.target.closest('a')).addClass('active');
        firstDay = $(event.target.closest('a')).attr('data-slide-index');
        lastDay = firstDay;
    }
});

var firstDay = 0;
var lastDay = 6;
$('.builder-days-selector1 a').on('click', function(event) {
    var active = $('.builder-days-selector1').find('.active').length;

    if (active === 0) {
        $(event.target.closest('a')).addClass('active');
        firstDay = $(event.target.closest('a')).attr('data-slide-index1');
    } else if (active === 1) {
        lastDay = firstDay;
        $(event.target.closest('a')).attr('data-slide-index1') > firstDay
            ? lastDay = $(event.target.closest('a')).attr('data-slide-index1')
            : firstDay = $(event.target.closest('a')).attr('data-slide-index1');

        for (var i = firstDay; i <= lastDay; i++) {
            $("a[data-slide-index1=" + i + "]").addClass('active');
        }
    } else {
        $('.builder-days-selector1 a').removeClass('active');
        $(event.target.closest('a')).addClass('active');
        firstDay = $(event.target.closest('a')).attr('data-slide-index1');
        lastDay = firstDay;
    }
});
Ответить с цитированием
  #9 (permalink)  
Старый 28.08.2018, 14:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

max1985,
дело не в том что вы показали, а в
Сообщение от j0hnik
Расчетом какой скрипт занимается?
скрипт который делает расчёт, на основании чего изменит алгоритм вычислений с диапазона на массив
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор диапазона дата-время в один input tzarek jQuery 5 31.08.2013 17:13