如何避免将display:none隐藏的输入字段发送到服务器?

时间:2009-09-03 15:29:40

标签: html http field

想象一下,您有一个表单可以切换多个字段的可见性。如果未显示该字段,则不希望其值在请求中。

你如何处理这种情况?

6 个答案:

答案 0 :(得分:123)

将表单元素设置为disabled将停止它进入服务器,例如:

<input disabled="disabled" type="text" name="test"/>

在javascript中它意味着这样的事情:

var inputs = document.getElementsByTagName('input');
for(var i = 0;i < inputs.length; i++) {
    if(inputs[i].style.display == 'none') {
        inputs[i].disabled = true;
    }
}
document.forms[0].submit();

在jQuery中:

   $('form > input:hidden').attr("disabled",true);
   $('form').submit();

答案 1 :(得分:13)

您可以使用javascript设置已禁用的属性。 “提交”按钮点击事件可能是执行此操作的最佳位置。

但是,我建议不要这样做。如果可能,您应该在服务器上过滤您的查询。这样会更可靠。

答案 2 :(得分:7)

如果要禁用隐藏父元素中的所有元素或某些元素,可以使用

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");

此示例http://jsfiddle.net/gKsTS/禁用隐藏div中的所有文本框

答案 3 :(得分:5)

怎么样:

$('#divID').children(":input").prop("disabled", true); // disable

$('#divID').children(":input").prop("disabled", false); // enable

在隐藏的div中切换所有子输入(选择,复选框,输入,textareas等)。

答案 4 :(得分:3)

一个非常简单(但不总是最方便)的解决方案是删除“name”属性 - 标准要求浏览器不发送未命名的值,并且我知道的所有浏览器都遵守此规则。

答案 5 :(得分:1)

我要么从输入中删除值,要么从DOM中分离输入对象,因此它不存在首先发布。