想象一下,您有一个表单可以切换多个字段的可见性。如果未显示该字段,则不希望其值在请求中。
你如何处理这种情况?
答案 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中分离输入对象,因此它不存在首先发布。