Неопределенные флажки с Alpine.js

Я пытаюсь реализовать неопределенные флажки с помощью Alpine.js.

Вы можете поставить все галочки, но когда вы пытаетесь снять какую-то галочку, там все галочки сняты.

Взгляните: https://codepen.io/nuno360/pen/gOwXpXP

<table x-data = "{ allChecked: [] }"
    x-init = "
        $watch('allChecked', value => {
            if (value.length === 0) {
                $refs.all.indeterminate = false;
                $refs.all.checked = false
            } else if (value.length == all.length) {
                $refs.all.indeterminate = false;
                $refs.all.checked = true
            } else {
                $refs.all.indeterminate = true
            }
        })
    " class = "bg-white min-w-full divide-y divide-gray-200">
    <thead>
        <tr>
            <th scope = "col" class = "h-14 leading-none" width = "60"><input id = "all" x-ref = "all" @change = "allChecked = $event.target.checked ? all : []; console.info(allChecked)" type = "checkbox" class = "form-checkbox border-gray-300 h-5 w-5 cursor-pointer rounded"></th>
            <th scope = "col" class = "h-14 text-left text-xs text-gray-800 uppercase">Name</th>
            <th scope = "col" class = "h-14 relative px-6"><span class = "sr-only">Editar</span></th>
        </tr>
    </thead>
    <tbody class = "divide-y divide-gray-200">
        <tr class = "hover:bg-gray-100">
            <td class = "h-14 leading-none text-center" width = "60">
                <input name = "delete[]" x-model = "allChecked" value = "1" type = "checkbox" class = "form-checkbox border-gray-300 h-5 w-5 cursor-pointer rounded">
            </td>
            <td class = "py-4 whitespace-nowrap text-sm text-gray-500">
                Regional Paradigm Technician
            </td>
            <td class = "px-5 py-4 whitespace-nowrap text-right text-sm font-medium">
                <a href = "#" class = "text-blue-600 hover:text-blue-900">Editar</a>
            </td>
        </tr>
        <tr class = "hover:bg-gray-100">
            <td class = "h-14 leading-none text-center" width = "60">
                <input name = "delete[]" x-model = "allChecked" value = "2" type = "checkbox" class = "form-checkbox border-gray-300 h-5 w-5 cursor-pointer rounded">
            </td>
            <td class = "py-4 whitespace-nowrap text-sm text-gray-500">
                Inter Paradigm
            </td>
            <td class = "px-5 py-4 whitespace-nowrap text-right text-sm font-medium">
                <a href = "#" class = "text-blue-600 hover:text-blue-900">Editar</a>
            </td>
        </tr>
    </tbody>
</table>

Спасибо за помощь.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
2 778
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина невозможности отменить выбор одной опции заключается в том, что all в строке ниже дает ref, который является элементом dom для функции watch.

<input id = "all" x-ref = "all" @change = "allChecked = $event.target.checked ? all : []; console.info(allChecked)" type = "checkbox" class = "...">

Нам нужно установить массив allChecked в ['1','2'], если установлен флажок all. Итак, чтобы решить эту проблему,

<input id = "all" x-ref = "all" @change = "allChecked = $event.target.checked ? ['1','2'] : []; console.info(allChecked)" type = "checkbox" class = "...">

Обновлять

Чтобы автоматически передавать значения, мы можем использовать функцию, которая собирает все значения флажка в массив, как показано ниже.

<table x-data = "{ allChecked: [], getValues(){
 var array = []
var checkboxes = document.querySelectorAll('input[x-model=allChecked]')

for (var i = 0; i < checkboxes.length; i++) {
  array.push(checkboxes[i].value)
}
return array;
               } }" x-init = "..." > 

И используйте функцию getValues вместо жесткого кодирования, как показано ниже.

<input id = "all" x-ref = "all" @change = "allChecked = $event.target.checked ? getValues() : []; console.info(allChecked)" type = "checkbox" class = "...">

Спасибо. Могу ли я сделать это динамически? Без передачи предметов вручную?

NAG 29.12.2020 12:58

да, вы можете использовать его в качестве реквизита данных, где указаны все значения флажков. или установите флажки с помощью data-prop или класса и соберите значения в массив.

Irfan 29.12.2020 14:16

@NAG Пожалуйста, ознакомьтесь с обновлением ответа, чтобы автоматически получать значения флажков.

Irfan 29.12.2020 14:36

Идеальный. Спасибо!

NAG 29.12.2020 16:04

Можете ли вы помочь мне установить соответствующий флажок как неопределенный, когда проверяются некоторые дети? Пожалуйста, проверьте: codepen.io/nuno360/pen/YzpLyqw Спасибо!

NAG 01.03.2021 21:27

Я думаю, что демо, которое у вас есть, работает нормально. Что с этим не так?. Можете ли вы объяснить сценарий, когда он терпит неудачу?

Irfan 02.03.2021 04:45

Если вы нажмете на Аргентину, на правой кнопке «23 региона», вы увидите, что у вас отмечены 2 варианта, но флажок Аргентины не является неопределенным.

NAG 02.03.2021 17:22

Другие вопросы по теме