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

gla*_*666 85 html field http

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

你是如何处理这种情况的?

kar*_*m79 124

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

<input disabled="disabled" type="text" name="test"/>
Run Code Online (Sandbox Code Playgroud)

在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();
Run Code Online (Sandbox Code Playgroud)

在jQuery中:

   $('form > input:hidden').attr("disabled",true);
   $('form').submit();
Run Code Online (Sandbox Code Playgroud)

  • 使用jQuery的伪选择器`:input`而不是`input`,您还可以轻松禁用所有`select`和`textarea`元素 (15认同)
  • 在jQuery> = 1.6中,你应该使用`prop("disabled",true)`http://api.jquery.com/prop/ (8认同)
  • @ dominicbri7 - 从jQuery 1.6开始,建议使用`.prop()`而不是`.attr()`来获取AND设置禁用和检查的属性.使用`.attr()`检查和/或设置在某些情况下会返回不需要的结果.在评论yorch所指的内容之前,请阅读jQuery文档. (2认同)
  • @DanielRikowski,这是什么jQuery,这里的jQuery毫无意义。让我们谈谈Vanilla JS。 (2认同)

Ben*_*hen 13

您可以使用javascript来设置disabled属性."提交"按钮点击事件可能是执行此操作的最佳位置.

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


mac*_*Jun 7

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

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

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


Ant*_*Max 5

关于什么:

$('#divID').children(":input").prop("disabled", true); // disable
Run Code Online (Sandbox Code Playgroud)

$('#divID').children(":input").prop("disabled", false); // enable
Run Code Online (Sandbox Code Playgroud)

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