Функция JavaScript для определения, установлены ли какие-либо флажки

#javascript

#javascript

Вопрос:

У меня есть таблица флажков, в которой я хочу проверить, установлен ли хотя бы один из них. Я написал небольшую функцию для перебора всех флажков с определенным именем и проверки проверяемого свойства, но мой код никогда не улавливает сценарий, в котором флажки не установлены.

Определение таблицы

 <div id="testTable">
    <table class="table table-striped">
        <caption></caption>
        <thead>
            <tr>
                <th>Test</th>
                <th>Description</th>
            </tr>
        </thead>
        <tr>
            <td>
                <input type="checkbox" id="testA" name="test" title="Run TestA" />
                <label for="testA">TestA</label>
            </td>
            <td>Description of TestA</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" id="testB" name="test" title="Run TestB" />
                <label for="testB">TestB</label>
            </td>
            <td>Description of TestB</td>
        </tr>
    </table>
</div>
 

Кнопка проверки

 <div class="row">
    <div class="form-group">
        <span class="input-group-btn">
            <button class="btn btn-default" type="button" id="btnRunTests">Run selected test(s)</button>
        </span>
    </div>
</div>
 

Скрипт

 <script type="text/javascript">
    $(document).ready(function () {
        $('#btnRunTests').click(function ()
        {
            if (!anyTestsChecked)
            {
                $('#divAlertMain').html('<div id="divAlert" class="alert alert-danger"><button type="button" class="close" data-dismiss="alert">x</button>You must select at least one test to run.</div>');
            }
            else
            {
                $('#divAlertMain').html('<div id="divAlert" class="alert alert-danger"><button type="button" class="close" data-dismiss="alert">x</button>Good job!</div>');
            }
            window.setTimeout(function () {
                $('#divAlert').hide('slow');
            }, 10000);
        });
    });

    function anyTestsChecked()
    {
        var chk = document.getElementsByName('test');
        var len = chk.length;

        var foundChecked = false;
        var i = 0;
        while (i < len amp;amp; !foundChecked)
        {
            if (chk[i].type === 'checkbox' amp;amp; chk[i].checked)
            {
                foundChecked = true;
            }
            i  ;
        }

        return foundChecked;
    }
</script>
 

Комментарии:

1. Где ваша divAlertMain стихия? Я не вижу этого в предоставленном HTML?

Ответ №1:

Вы можете добиться того же, используя приведенный ниже код. (Для этого не нужно писать дополнительную функцию)

 <script type="text/javascript">
    $(document).ready(function () {
        $('#btnRunTests').click(function () {
            if ($("input[name='test']").prop('checked') == false) {
                $('#divAlertMain').html('<div id="divAlert" class="alert alert-danger"><button type="button" class="close" data-dismiss="alert">x</button>You must select at least one test to run.</div>');
            }
            else {
                $('#divAlertMain').html('<div id="divAlert" class="alert alert-danger"><button type="button" class="close" data-dismiss="alert">x</button>Good job!</div>');
            }
            window.setTimeout(function () {
                $('#divAlert').hide('slow');
            }, 10000);
        });
    });
</script>
 

Ответ №2:

Ваша функция anyTestsChecked никогда не запускается. Вы просто проверяете, существует ли он. Добавьте () в конец вызова вашей функции в операторе if.

 if (!anyTestsChecked())