jQuery .is (': флажок') возвращает неправильное значение - PullRequest
0 голосов
/ 05 февраля 2020

По сути, у меня есть таблица с флажками в первом столбце каждой строки (остальная часть таблицы - просто параметры конфигурации, а каждая строка - это собственный набор параметров, которые сохраняются, только если этот флажок установлен). В верхней части таблицы есть флажок select-all / deselect-all, и с его помощью возникает проблема. Функция select-all прекрасно работает с тем, что отображается в пользовательском интерфейсе, но позже, когда я go через некоторую проверку, значение, извлеченное из флажков, является неправильным.

Просто снятие отметки и проверка полей вручную работает нормально. Но как только я использую select-all, значения всегда true.

Итак, ожидаемый результат: select-all корректно обновляет значения (или имеет лучший способ получения значений через jQuery или просто Javascript, в зависимости от того). Я предполагаю, что что-то не так с тем, как я обновляю значения в select-all, но я не нашел альтернативы тому, что я пытаюсь сделать sh этой работой.

// there is more in the class, but as far as what I think the question needs:
public class SomeModel
{
    public bool _UseThisRow { get; set; }
}


@model Models.SomeModel
@{
}

<script type="text/javascript">

    function ValidateSelections(){
        var isChk = $('[name="@nameof(Model._UseThisRow)"]').is(':checked');
        if(isChk){
         alert('error');
        }
    }

    $('#opt-all').change(function(){
        var val = $(this).is(":checked");

        $('[name="@nameof(Model._UseThisRow)"]').prop('checked', val);
        // and several more of these^ for the rest of the checkboxes
    }

    $('#submit').click(function(){
        if(ValidateSelections()){
            // do stuff
        }
    }

</script>

<div>
    <table class="table table-bordered table-condensed table-stripted table-responsive" cellspacing="0" cellpadding="0">
        <thead>
            <tr>
                <th style="text-align:center;width:30px;"> 
                    <input type="checkbox" id="opt-all" />
                </th>
            </tr>
        </thead>
        <tbody>
            <tr> 
                <td style=text-align: center;" id="@nameof(Model._UseThisRow>
                    @Html.CheckBoxFor(m => m._UseThisRow)
                </td>
            </tr>
        </tbody>
    </table> 
</div>

1 Ответ

0 голосов
/ 06 февраля 2020

В обратном вызове $('#opt-all').change(function(){ я закончил тем, что заменил код, который проверяет / снимает флажок, на более ориентированный на 'DOM' код, вместо простого jQuery.

Вместо этого: $('[name="@nameof(Model._UseThisRow)"]').prop('checked', val);

Я использовал это: $('[name="@nameof(Model._UseThisRow)"]')[0].checked = val;

...