我有以下代码
@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中搜索了类似的结果,但没有一个完全适用于我的场景。如何发送正确的值?
答案 0 :(得分:42)
如果选中了复选框,则可以使用以下验证。
var chk = $('#use').attr('checked');
或
var chk = $('#use').is(':checked');
答案 1 :(得分:6)
.val()返回value属性的内容。因为它可能是非null,等于true。
同时检查外壳。 JavaScript,css&amp;因此jQuery也区分大小写。
答案 2 :(得分:1)
与Simon说的一样,.val()返回复选框的value属性,该属性可以是您想要的任何值。但更具体地说,它返回DOM对象的值 property ,它由属性初始化。 MVC似乎将值设置为&#34; true&#34;默认情况下,这对我来说似乎毫无意义。但在某些情况下,您可能希望将this thread指出,将其设置为已检查选项的ID或其他有意义的值。
尼古拉斯提供了一个很好的方法来确定上面是否选中了复选框。选中并取消选中此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属性不依赖于checked状态,并且当复选框更改时,标记中的实际checked属性不会更新。只有幕后DOM对象的属性,这是后三种方法访问的内容。
有关详细信息,请参阅jQuery的API documentation on .prop。