【问题标题】:MVC 3 checkbox always returns true, even if uncheckedMVC 3 复选框始终返回 true,即使未选中也是如此
【发布时间】:2011-12-02 05:03:10
【问题描述】:

我有以下代码

@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 上搜索过类似的结果,但没有一个完全适用于我的场景。如何发送正确的值?

【问题讨论】:

  • 无论#use 的检查状态如何,您所说的var chk = $(this).find("#use").val(); chk 都等于true?
  • 是的,即使它没有被选中,它仍然会发布正确的操作方法

标签: jquery asp.net-mvc asp.net-mvc-3 checkbox


【解决方案1】:

如果复选框被选中,您可以使用以下验证。

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

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

【讨论】:

  • 太棒了!第二个选项完全符合我的要求。
  • @Heinrich - 很高兴为您提供帮助,您可能希望使用 fiddler2 来帮助您调试此类问题。
  • 第一个选项总是返回'检查',无论如何:)
  • 第二个选项是我的答案
  • 在我的情况下,第一个选项始终未定义,但第二个选项就像一个魅力
【解决方案2】:

.val() 返回 value 属性的内容。因为它可能是等于 true 的非 null。

还要检查你的外壳。 JavaScript, css & 因此 jQuery 也区分大小写。

【讨论】:

  • 谢谢你帮了我很多!
【解决方案3】:

就像 Simon 说的,.val() 返回复选框的 value 属性,可以是你想要的任何值。但更具体地说,它返回由属性初始化的 DOM 对象的 property 值。 MVC 似乎默认将值设置为“true”,这对我来说似乎毫无意义。但在某些情况下,您可能希望将其设置为一个 ID 或其他一些有意义的值,如 this thread 所指出的。

Nicholas 提供了一种很好的方法来判断上面的复选框是否被选中。选中和取消选中此 jsfiddle 上的复选框以获取各种方法及其结果的示例:

JQuery Checkbox Checked


小提琴总结:

$("#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 documentation on .prop

【讨论】:

    【解决方案4】:
    var chk = $('#use').checked;
    

    为我工作

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2018-04-02
      • 2014-04-10
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      相关资源
      最近更新 更多