Javascript 为什么字段的样式为“=”;显示:隐藏";发回?
我有一个表单,用户可以通过单击复选框隐藏或显示字段。我正在像这样隐藏字段:Javascript 为什么字段的样式为“=”;显示:隐藏";发回?,javascript,jquery,html,css,forms,Javascript,Jquery,Html,Css,Forms,我有一个表单,用户可以通过单击复选框隐藏或显示字段。我正在像这样隐藏字段: $("#ContactDetail_PostalAddressSameAsAddress").change(function () { if ($(this).prop('checked') != true) { $("#PostalAddressContainer").show("fast"); $('#PostalAddressContainer :i
$("#ContactDetail_PostalAddressSameAsAddress").change(function () {
if ($(this).prop('checked') != true) {
$("#PostalAddressContainer").show("fast");
$('#PostalAddressContainer :input').show();
}
else {
$("#PostalAddressContainer").hide("fast");
$('#PostalAddressContainer :input').hide();
}
});
我的印象是,带有style=“display:none”的字段不会发回。但是,当我提交表单时,客户端验证不会验证隐藏字段,这正是我所期望的。但是,在服务器端,ModelState.IsValid为false,因为必须显示:未设置none字段
在fiddler中,我可以看到显示的表单数据:无字段。请提供帮助。尝试禁用表单字段:
$("#PostalAddressContainer").prop("disabled", true);
如果只是隐藏,它仍将与POST请求一起发送。CSS不应该对表单行为有任何影响,因为它的目的是改变事物的显示方式
注意,这也是
的要点-不向用户显示,但仍将随请求一起发送。我不太确定问题是什么,但这是正常行为。您还应该添加服务器端验证,因为您的应用程序需要更定制的验证逻辑
顺便说一句,服务器端验证也是一种推荐做法您可以禁用它
$('#PostalAddressContainer').attr('disabled', 'disabled');
将不会在POST请求中考虑。style=“display:hidden”无效。我相信您将其与style=“可见性:隐藏;”混淆了
我相信您想使用style=“display:none;”“不幸的是,您的印象不正确。提交表单时,浏览器将序列化并发送所有成功的控件 成功的控件对于提交是“有效的”。每一个成功的 控件将其控件名与其当前值配对作为 提交的表单数据集。必须定义一个成功的控件 在表单元素中,并且必须具有控件名称 然而:
- 禁用的控件不能成功
- 如果表单包含多个提交按钮,则只有激活的提交按钮成功
- 所有“打开”复选框都可能成功
- 对于共享名称属性相同值的单选按钮,只有“开”单选按钮可能成功
- 对于菜单,控件名称由选择元素提供,值由选项元素提供。只能选择选定的选项 成功的如果未选择任何选项,则控件不可用 成功,并且名称或任何值都不会提交到 提交表单时使用服务器
- 文件选择的当前值是一个或多个文件名的列表。提交表格后,每个文件的内容如下: 与其他表单数据一起提交。文件内容如下: 根据表单的内容类型打包
- 对象控件的当前值由对象的实现决定
此外,用户代理不应考虑以下控件 成功的:
- 重置按钮
- 已设置declare属性的对象元素
说得好,但我有一种感觉,OP在这一部分被搞糊涂了。在下面你可以看到他说的
display:none
是实际应用于元素的内容。因为它们是隐藏的,而不是禁用/删除的。就像type=“hidden”被发回的方式一样。@user1715749应该将其标记为已接受。这是设置输入/选择禁用的建议方法
$("#PostalAddressContainer :input").prop("disabled", true).hide();