如何避免发送隐藏显示input字段:无到服务器?

想象一下,你有一个窗体,你切换几个领域的可见性。 如果该字段没有显示,你不希望它的价值在请求。

你如何处理这种情况?

设置一个表单元素为禁用将停止去服务器,例如:

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

你可以使用JavaScript来设置禁用的属性。 “提交”button点击事件可能是最好的地方。

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

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

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

这个例子http://jsfiddle.net/gKsTS/禁用隐藏的div内的所有文本框;

关于什么:

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

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

要切换隐藏的div内的所有孩子input(select,checkbox,input,textareas等)。

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

我要么从input中删除值,要么将input对象从DOM中分离出来,这样它就不存在了。