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();