Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите как выделить все checkbox между выделенными вручную? (https://javascript.ru/forum/misc/77455-podskazhite-kak-vydelit-vse-checkbox-mezhdu-vydelennymi-vruchnuyu.html)

Artur_Hopf 07.05.2019 11:48

Подскажите как выделить все checkbox между выделенными вручную?
 
Добрый день.
Есть таблица с чекбоксами. По нажатию на них происходить запись id в массив. Выглядит это сейчас так:

if(trCheck){
  var result = [];
  [].forEach.call(trCheck, function(item, i) {
      checkBox = item.childNodes[0].childNodes[0];
      if(checkBox){
           checkBox.addEventListener('click', function() {
                if(this.checked){
                     id = this.parentNode.getAttribute("id");
                     result[i] = id;
                }else{
                     delete result[i];
               }
           });
        }
   });

   return result;
}


Как сделать так, чтобы если галочки поставлены не друг рядом с другом их тоже выбирало и id записывались в массив.
Например пользователь поставил галочки на вторую и четвертую строку, чтобы и третья выбралась.

Заранее спасибо.

ksa 07.05.2019 12:31

Цитата:

Сообщение от Artur_Hopf
Как сделать так ...

Для начала хотя бы сделай полный тестовый пример.

рони 07.05.2019 12:33

Artur_Hopf,
выделение диапазона по двум кликам

Artur_Hopf 07.05.2019 13:00

рони,
спасибо, попробую :thanks:

Artur_Hopf 08.05.2019 10:32

Сделал так, все работает, вроде не слишком криворуко:
if(trCheck){
            var result = [];
            [].forEach.call(trCheck, function(item) {
                checkBox = item.childNodes[0].childNodes[0];
                if(checkBox){
                    checkBox.addEventListener('click', function() {
                        var num = 0;
                        [].forEach.call(trCheck, function(items) {
                            check = items.childNodes[0].childNodes[0];
                            if(check.checked === true){
                                num++
                            }
                        });
                        if(num > 1){
                            if(this.checked){
                                var union = 0;
                                [].forEach.call(trCheck, function(items, i) {
                                    id = items.childNodes[0].getAttribute("id");
                                    check = items.childNodes[0].childNodes[0];
                                    if(check.checked === true){
                                        result[i] = id;
                                        union++;
                                    }else{
                                        if(union > 0 && union < num){
                                            check.checked = true;
                                            result[i] = id;
                                        }
                                    }
                                });
                            }else{
                                [].forEach.call(trCheck, function(items) {
                                    check = items.childNodes[0].childNodes[0];
                                    check.checked = false;
                                    result = [];
                                });
                            }
                            return result;
                        }
                    });
                }    
            });
        }


Часовой пояс GMT +3, время: 05:28.