динамическая проверка / снятие флажков - PullRequest
0 голосов
/ 17 апреля 2019

Существует множество постов о динамической проверке / снятии флажков, но я полагаю, что я немного отличается.Мой флажок - флажок с несколькими значениями (я использую его для параметризации графика), где данные поступают из запроса, например:

select 'all' as val from dual
union
select name_of_month as val from months

Итакрезультат - 13 флажков: [0] (все) [1] - [12] (январь, февраль и т. д.)

То, что я хотел бы получить, ниже поведения

  • когда я отмечу (все), все 13 флажков будут отмечены
  • когда я сниму (все), все 13 флажков будут сняты
  • , когда я сниму один из 1-12 флажков, и (все) флажок будетснимите флажок
  • , когда все 12 флажков будут установлены один за другим, флажок также будет установлен

Я не уверен, достаточно ли понятно описание выше, но я полагаю, вы чувствуете, как этот флажок должен работать

ОБНОВЛЕНИЕ: Я - администратор Oracle (с базовыми знаниями JavaScript), который пытается что-то создать в APEX.Пока я не использую волшебников и мышь для рисования объектов, это легко.Сейчас я вижу, что мне нужно набрать несколько строк кода, поэтому, пожалуйста, дайте мне хотя бы какое-то объяснение, где его набирать и как его запустить, чтобы он работал.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Я сделал это в моем проекте React, сценарий немного отличается, но, возможно, это поможет вам .....

Итак, это мой элемент-флажок, который вы можете скопировать в соответствии со своими потребностями:

<input type="checkbox" checked={this.isChecked(props.original.EmployeeId)} onChange={this.singleChange.bind(this, props.original.EmployeeId)}

isChecked = (empId) => {
        let checkedItems = this.state.checkItems;
        return checkedItems.indexOf(empId) > -1;
    }



 singleChange = (employeeId, event) => {
            let checkedItems = this.state.checkItems;
            if (event.target.checked) {
                checkedItems.push(employeeId);
            }
            else {
                if (checkedItems.includes(employeeId)) {
                    let index = checkedItems.indexOf(employeeId);
                    checkedItems.splice(index, 1);
                }
            }
            checkedItems.length == this.props.employees.length ? this.setState({ allChecked: true }) : this.setState({ allChecked: false })
            this.setState({ checkItems: checkedItems })    
        }

Здесь я поддерживаю массив, который содержит employeeId тех сотрудников, которых я буду проверять, поэтому isChecked - это функция, которая проверяет, проверен ли сотрудник, или, относительно вас, можно сказать, что флажок установлен или нет. Функция singleChange () вызывается во время события onChange, которое предназначено только для вставки и удаления идентификатора из массива, если установлен или не установлен соответственно. Но согласно вашему сценарию здесь важна последняя строка кода, которая проверяет, все ли проверены или нет. Таким образом, если вы снимите флажок один все будет снят, если вы установите один за другим все флажки, то флажок (все) будет установлен автоматически. Для (всех) одного флажка вы должны будете поддерживать логическую переменную.

<input type="checkbox" checked={this.state.allChecked} onChange={this.allChecked}></input> 

allChecked = (event) => {
        const allEmployeeIds = this.props.employees.map(employee => employee.EmployeeId);
        if (event.target.checked) {
            this.setState({ checkItems: allEmployeeIds });
            this.setState({ allChecked: true })
        }
        else {
            this.setState({ checkItems: [] });
            this.setState({ allChecked: false });
        }
    }

Этот элемент ввода выше - мой флажок выбрать все. Проверяется на основе булевой переменной все проверено. Здесь функция allChecked вызывается при возникновении события onChange. Если флажок установлен, эта функция будет помещать все идентификаторы в тот же массив, который использовался выше, а если непроверенный массив будет пустым.

Не путайте с состоянием и другими свойствами, как я сделал это в реакции. Это, возможно, поможет вам. Не стесняйтесь спрашивать, если застряли

1 голос
/ 17 апреля 2019

Вы можете легко сделать это, используя jquery.Я сделал пример кода для вашего проекта.Надеюсь, это поможет.

$( document ).ready(function() {
    $('.all_chkbox').change(function(){
        if($(this)[0].checked){
            $('.chkbox').prop("checked", true);
        }else{

            $('.chkbox').prop("checked", false);
        }
    });

    $('.chkbox').change(function(){
        var flag = true;
        $('.chkbox').each(function(){
            if(!$(this)[0].checked){
                flag = false;
                return;
            }
        });
        $('.all_chkbox').prop("checked", flag);
    });
});
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Checkbox</title>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

</head>
<body>
    <div class="checkbox_wrapper">
        <input class="all_chkbox" type="checkbox">
        <ul>
            <li>checkbox 1 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 2 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 3 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 4 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 5 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 6 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 7 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 8 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 9 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 10 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 11 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 12 <input class="chkbox" type="checkbox" name="" ></li>
            <li>checkbox 13 <input class="chkbox" type="checkbox" name="" ></li>
        </ul>
    </div>

</body>
</html>
...