HamSter007
@HamSter007
HTML/CSS верстальщик

Как отметить и предыдущие чекбоксы?

Есть список из checkbox-ов:

<ul class="list-inline" id="app">
  <li class="list-inline-item">
    <div class="checkbox checkbox_num">
      <label class="checkbox-label">
        <input type="checkbox" class="checkbox-input" v-model="checked">
        <span class="checkbox-indicator" >1</span>
      </label>
    </div>
  </li>
  <li class="list-inline-item">
    <div class="checkbox checkbox_num">
      <label class="checkbox-label">
        <input type="checkbox" class="checkbox-input">
        <span class="checkbox-indicator">2</span>
      </label>
    </div>
  </li>
  <li class="list-inline-item">
    <div class="checkbox checkbox_num">
      <label class="checkbox-label">
        <input type="checkbox" class="checkbox-input">
        <span class="checkbox-indicator">3</span>
      </label>
    </div>
  </li>
  <li class="list-inline-item">
    <div class="checkbox checkbox_num">
      <label class="checkbox-label">
        <input type="checkbox" class="checkbox-input" checked>
        <span class="checkbox-indicator">4</span>
      </label>
    </div>
  </li>
  <li class="list-inline-item">
    <div class="checkbox checkbox_num">
      <label class="checkbox-label">
        <input type="checkbox" class="checkbox-input">
        <span class="checkbox-indicator">5</span>
      </label>
    </div>
  </li>
  </ul>


var app = new Vue({
        el: '#app',
        data: {
            checked: false
        }
});


jsbin

Есть ли возможность с помощью vue.js при выборе вторго чекбокса - отмечать выбранными первый и второй, при выборе третьего - 1-ый и 2-ой и т.д. (выбор всех предыдущих)?
Примеров не могу найти и реализовать не понятно с чего. Может кто подскажет.
  • Вопрос задан
  • 455 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Свойство checked сделать массивом, который будет содержать состояния чекбоксов. Сами чекбоксы на основе этого массива и создавать, через v-for. Слушать событие change, по которому выставлять состояния предыдущих чекбоксов (относительно того, на котором событие случилось) в true, следующих в false:

data: () => ({
  checked: [ 0, 0, 0, 0, 0 ],
}),
methods: {
  onChange(e, index) {
    const checked = e.target.checked;

    this.checked = [
      ...Array(index + checked).fill(1),
      ...Array(this.checked.length - index - checked).fill(0),
    ];
  },
},

<li v-for="(n, i) in checked">
  <label>
    <input
      type="checkbox"
      :checked="n"
      @change="onChange($event, i)"
    >
    {{ i + 1 }}
  </label>
</li>

UPD. Вынесено из комментариев:

а если несколько таких списков будет

Очевидно, нужен отдельный массив checked для каждого списка (если только вы не хотите, чтобы все списке выглядели одинаково). Что касается функции onChange, то надо будет добавить ей дополнительный параметр - чтобы была возможность указывать, с каким именно списком в данный момент идёт работа.

https://jsfiddle.net/9ba682w4/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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