Флажок MVC 3 всегда возвращает true, даже если не отмечен - PullRequest
18 голосов
/ 06 октября 2011

У меня есть следующий код

@foreach (var item in Model.Defaults)
    {
        <tr class="CertainCategory">
            <td>
                @item.Item1
            </td>
            <td>
                @Html.CheckBoxFor(c => c.Use)
                @Html.Hidden("guid", guid.guid.ToString())
            </td>
        </tr>
    }

Я пытаюсь использовать AJAX для отправки значений формы в метод контроллера.Моя проблема заключается в том, что значение флажка всегда отправляется как true.

$('.CropUsageItem').each(function () {

            var guid = $(this).find("#guid").val();
            var chk = $(this).find("#use").val();
            var data = {
                guid: guid,
                chk: chk
            };

            $.ajax({
                async: false,
                type: "POST",
                url: "DefaultValues/SaveDefault",
                data: data
            });
        });

. Я искал StackOverflow с похожими результатами, но ни один из них полностью не применим к моему сценарию.Как я могу отправить правильное значение?

Ответы [ 4 ]

42 голосов
/ 06 октября 2011

Вы можете использовать следующую проверку, если флажок установлен.

var chk = $('#use').attr('checked');

или

var chk = $('#use').is(':checked'); 
6 голосов
/ 06 октября 2011

.val () возвращает содержимое атрибута значения.так как это, вероятно, ненулевое значение, равное true.

Также проверьте свой регистр.JavaScript, CSS и поэтому JQuery чувствительны к регистру.

1 голос
/ 21 июля 2015

Как сказал Саймон, .val () возвращает атрибут значения флажка, который может быть любым желаемым значением. Но, более конкретно, он возвращает значение свойство объекта DOM, которое инициализируется атрибутом. MVC, по-видимому, устанавливает значение «true» по умолчанию, что мне кажется довольно бессмысленным. Но в некоторых случаях вы можете захотеть установить для него идентификатор или какое-либо другое значимое значение для отмеченной опции, как указывает этот поток .

Николас предоставил один хороший способ узнать, установлен ли флажок выше. Установите и снимите флажок на этом jsfiddle для примера различных подходов и их результатов:

Флажок JQuery установлен


Сводка скрипки:

$("#use").val();  //Returns the value. Not related to checked state.
$("#use").attr("checked")  //Returns the checked attribute value. Does not change with checked state.
$("#use").prop("checked")  //Returns boolean checked state.
$("#use")[0].checked)  //Returns boolean checked state.
$("#use").is(":checked")  //Returns boolean checked state.

Обратите внимание, что результаты .val и .attr не меняются. Это связано с тем, что свойство val не зависит от проверенного состояния, а фактический проверенный атрибут в разметке не обновляется при изменении флажка. Только свойство объекта DOM за кадром, к которому обращаются последние три метода.


См. Документацию jQuery API на .prop для получения дополнительной информации об этом.

0 голосов
/ 02 мая 2015
var chk = $('#use').checked;

работал на меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...