lavezzi1
@lavezzi1

Переключение статусов на jquery?

Здравствуйте!
Как элегантно реализовать переключение статусов в таск менеджере?
Логика:
У задачи есть три статуса - активаная, завершенная, отложенная.

Нужно реализовать переключение статусов туда-обратно.

Я новичок в js и пока получилось написать вот так.

var taskActive = $('<div class="taskActive"><span>Active</span></div>'),
    taskStop = $('<div class="taskStop"><span>Stop</span></div>'),
    taskDone = $('<div class="taskDone"><span>Done</span></div>');

$('.to-done').click(function(){
  $('.taskDone').replaceWith(taskActive);
});


Я понимаю что этот код хрень полная, потому что не понятно как определять что статус например актив или стоп.

Также проблема в том, что статусы не toggleяться.

Помогите пожалуйста понять как решать такие задачи.
  • Вопрос задан
  • 255 просмотров
Пригласить эксперта
Ответы на вопрос 2
HoHsi
@HoHsi
<div class="task-status task-active selected">Active</div>
<div class="task-status task-stop">Stop</div>
<div class="task-status task-done">Done</div>


// 1, и самое главное, не вызывайте по многу раз функции, это б** самое медленное место в JS.
// Вы сделали правильно, а вот предыдущий ответчик, увы.

// 2. Кложурка - наше все. ()()
;(function($){
    // Выполнится, только после прогрузки страницы
    $(function{
        var $taskStatus = $('.task-status'); // Доллар как бы показывает, что это JQ объект

        // 3. В HTML можно убрать selected, что-бы код смотрелся гармончнее
        // Тогда следуте добавть
        /*
        $taskStatus.first().addClass('selected');
         */

        $taskStatus.on('click', function(){
            var $this = $(this);

            // Зачем, что-то менять если это и так уже `selected`
            if(!$this.hasClass('selected')){
                var $other = $taskStatus.not( $this );

                // Тем самымы, даже при малом FPS, не будет мерцания
                $this.addClass('selected');
                $other.removeClass('selected');
            };
        });
    });
})(jQuery);


И как всегда, минутка рекламы CoffeeScript
do ($ = jQuery)->
    $ ->
        $taskStatus = $('.task-status')

        $taskStatus.on 'click', ->
            $this = $(this)

            unless $this.hasClass('selected')
                $other = $taskStatus.not( $this )

                $this.addClass('selected')
                $other.removeClass('selected')
Ответ написан
@IceJOKER
Web/Android developer
на странице три div-a
<div class="task-status task-active selected">Active</div> //selected - активный статус
<div class="task-status  task-stop">Stop</div>
<div class="task-status  task-done">Done</div>


$('.task-status').click(function(){
  $('.task-status').removeClass('selected'); //сначала убираем, можно явно найти с классом selected или просто у всех убрать
  var el = $(this); //для удобства
  if(!el.hasClass('selected')){ //если не имеет класса selected
    el.addClass('selected'); //добавляем его
  }
});


Дальше уже
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы