Я внес некоторые изменения в ваш код ... Я думаю, что это может быть хорошим началом.
Я добавил эту функцию:
function selectAll(seats) {
seats.forEach(function(seat) {
seat.className = seat.className + ' selected';
});
}
Он устанавливает выбранный класс для всех элементов в массиве
И я изменил вашу функцию seatClick к этому:
function seatClick(seat) {
seat = (this instanceof HTMLInputElement) ? this : seat;
var firstSelected;
var selectedSeats = [];
var thisInputHasAlreadyBeenSeen = false;
var confirmedSeats = [];
if (seat.classList.contains('reserved')==false) {
if (seat.classList.toggle('selected')) {
addSeat(document.getElementById('seats'), seat.value);
$(".seat").each(function() {
if(this != seat) {
if(firstSelected == null && this.classList.contains('selected')) {
firstSelected = this;
selectedSeats.push(firstSelected);
confirmedSeats = selectedSeats.slice();
} else if (firstSelected) {
if(this.classList.contains('selected')) {
selectedSeats.push(this);
confirmedSeats = selectedSeats.slice();
}
if(!this.classList.contains('reserved')) {
selectedSeats.push(this);
}
else{
if(!thisInputHasAlreadyBeenSeen) {
selectedSeats = [];
firstSelected = null;
} else {
return false;
}
}
}
} else {
selectedSeats.push(this);
confirmedSeats = selectedSeats.slice();
if(firstSelected == null) {
thisInputHasAlreadyBeenSeen = true;
firstSelected = this;
}
}
});
if(confirmedSeats.length > 1) {
selectAll(confirmedSeats);
}
} else {
removeSeat(document.getElementById('seats'), seat.value);
}
} else {
alert("This seat is reserved!\nPlease select another seat");
removeSeat(document.getElementById('seats'), seat.value);
return;
}
}
В основном что он делает:
Существует два массива: один для временного моря ц (временного массива) (некоторые из них могут быть не выбраны в некоторых случаях), и один для сидений, которые будут выбраны (фактический массив)
Он перебирает все свои места.
Если он встречает пустое место, он помещает его во временный массив, если фактический массив уже запущен.
Если он встречает «выбранное» место, он либо запускает фактический массив, либо подтверждает временные данные массива, копируя его внутри фактического массива.
Если он встречает зарезервированное место, он останавливает цикл ...
jsfiddle пример: https://jsfiddle.net/7J8vj/94/
Надеется, что это помогает вам
Я не вижу, что не работает здесь? Может быть, я временно слеп. –
@Gustaf Он хочет, чтобы, если вы сначала выберите сиденье a1, и после этого f6 все места между ними также выбраны. – Mivaweb
Ах! Хотя он сказал, что это происходит, и что это проблема. Спасибо за полировку моих очков @Mivaweb –