Javascript 有什么原因,为什么HTML表单中禁用的字段仍然会被传输?
所以我有一个固定的HTML结构,我不能影响它。该结构由一个工具提供,您可以通过拖放添加选择/输入/etc字段。Javascript 有什么原因,为什么HTML表单中禁用的字段仍然会被传输?,javascript,html,css,disabled-input,Javascript,Html,Css,Disabled Input,所以我有一个固定的HTML结构,我不能影响它。该结构由一个工具提供,您可以通过拖放添加选择/输入/etc字段。 例如,一个常规文本字段会得到以下HTML代码: <div id="d_001" class="field text "> <label for="f_001" id="l_001">Shortdescription</label> <input id="f_001" name="id1" value="" /&
例如,一个常规文本字段会得到以下HTML代码:
<div id="d_001" class="field text ">
<label for="f_001" id="l_001">Shortdescription</label>
<input id="f_001" name="id1" value="" />
</div>
通过谷歌搜索,我发现禁用未选中的字段应该可以解决问题。但事实并非如此。它显然会禁用这些字段,因为它们是灰色的,不可编辑,但它们在发送表单时仍会被传输。基于上面的HTML代码片段,我尝试通过
document.getElementsByTagName('input').disabled = true;
-->这将禁用所有“输入”输入字段,但仍提交没有内容的标签。即使我不确定它是否没有提交内容,或者它是否仍然提交空内容。(是的,这将省略选择列表、文本区域等,但这是第二个问题,可以通过对所有标记类型执行相同操作来解决)
因此,我认为可能需要禁用div项中的所有元素,这意味着我还需要通过“禁用”标签
documents.getElementsByTagName('label').disabled = true;
我不太惊讶它不起作用。但由于我不能整体禁用div项,我真的不知道我缺少了什么。是否还有其他强制提交字段的内容?
我非常感谢任何能把我推向正确方向的暗示
编辑:
根据请求,我想添加禁用上述输入字段的确切循环:
// list with links to make the items clickable
<ul id="myUL">
<li><a id="li1" title="pants" href="javascript:void(0)" onclick="returncontent(this);showpants();">Pants</a></li>
<li><a id="li2" title="bra" href="javascript:void(0)" onclick="returncontent(this);showbra();">Bra></li>
<li><a id="li3" title="tshirt" href="javascript:void(0)" onclick="returncontent(this);showtshirt();">T-Shirt</a></li>
<li><a id="li4" title="socks" href="javascript:void(0)" onclick="returncontent(this);showsocks();">Socks</a></li>
</ul>
// a var array containing the available class attributes
var elemente = ["pants","bra","tshirt","socks"];
// defining the functions triggered by the list
function showpants(){
howtocode(0);
}
function showbra(){
howtocode(1);
}
function showtshirt(){
howtocode(2);
wosOSD();
}
function showsocks(){
howtocode(3);
// have the function do different things depending on the selected list item
function howtocode(value){
var arrayLength = elemente.length;
for (var i = 0; i < arrayLength; i++) {
var classEle = document.getElementsByClassName(elemente[i]);
if (elemente[i] === elemente[value]){
changeStyle(elemente[i],classEle,"block");
setRequired(elemente[i],classEle);
}
else{
changeStyle(elemente[i],classEle,"block");
disableFields(elemente[i],classEle);
emptyFields(elemente[i],classEle);
}
}
}
function disableFields(ele, classEle){
for (var n = 0; n < classEle.length; n++) {
var inputfields3 = classEle[n].getElementsByTagName('input');
var textfield3 = classEle[n].getElementsByTagName('textarea');
for (var o = 0; o < inputfields3.length; o++){
inputfields3[o].disabled = true;
}
for (var p = 0; p < textfield3.length; p++){
textfield3[p].disabled = true;
}
}
}
看看这个问题,
您需要设置
disabled=“disabled”
而不是设置disabled=true您说它提交了数据,但您如何知道它提交了什么?您确定没有查看添加了禁用字段的解析结果吗?以原始格式发送的数据是什么?您使用什么机制“提交”数据?A会很有帮助的。@Turnip好吧,那就是它得到的地方。问题是我说的是一个票证工具,它提供了创建“webtickets”的选项,这样用户就可以通过该工具中的webform创建票证。整个传动机构是一个黑匣子。我可以在浏览器中查看jQuery代码,但实际上它只是无数行未格式化的代码。但是我将尝试检索一些有用的信息。”document.getElementsByTagName('input').disabled=true;
它禁用所有“input”输入字段”-不,它没有getElementsByTagName
返回一个节点列表,您只需将该节点列表的disabled
属性设置为true,这不会产生任何效果。您需要循环此列表中包含的元素,并分别为每个元素设置disabled属性。@Ashley此时,我觉得有义务提及几周前刚刚开始的JS旅程。恐怕我不知道如何才能找到你问题的答案。你说的“原始格式”是什么意思?我想你把html和js的设置搞混了。如果您查看未被接受的答案(分数较高),您将看到设置为true
via js是正确的。然而,海报上说,即使输入明显被禁用,字段仍在发送,这是不正确的行为。
documents.getElementsByTagName('label').disabled = true;
// list with links to make the items clickable
<ul id="myUL">
<li><a id="li1" title="pants" href="javascript:void(0)" onclick="returncontent(this);showpants();">Pants</a></li>
<li><a id="li2" title="bra" href="javascript:void(0)" onclick="returncontent(this);showbra();">Bra></li>
<li><a id="li3" title="tshirt" href="javascript:void(0)" onclick="returncontent(this);showtshirt();">T-Shirt</a></li>
<li><a id="li4" title="socks" href="javascript:void(0)" onclick="returncontent(this);showsocks();">Socks</a></li>
</ul>
// a var array containing the available class attributes
var elemente = ["pants","bra","tshirt","socks"];
// defining the functions triggered by the list
function showpants(){
howtocode(0);
}
function showbra(){
howtocode(1);
}
function showtshirt(){
howtocode(2);
wosOSD();
}
function showsocks(){
howtocode(3);
// have the function do different things depending on the selected list item
function howtocode(value){
var arrayLength = elemente.length;
for (var i = 0; i < arrayLength; i++) {
var classEle = document.getElementsByClassName(elemente[i]);
if (elemente[i] === elemente[value]){
changeStyle(elemente[i],classEle,"block");
setRequired(elemente[i],classEle);
}
else{
changeStyle(elemente[i],classEle,"block");
disableFields(elemente[i],classEle);
emptyFields(elemente[i],classEle);
}
}
}
function disableFields(ele, classEle){
for (var n = 0; n < classEle.length; n++) {
var inputfields3 = classEle[n].getElementsByTagName('input');
var textfield3 = classEle[n].getElementsByTagName('textarea');
for (var o = 0; o < inputfields3.length; o++){
inputfields3[o].disabled = true;
}
for (var p = 0; p < textfield3.length; p++){
textfield3[p].disabled = true;
}
}
}
var data = elements.inject({ }, function(result, element) {
if (!element.disabled && element.name) {
key = element.name; value = $(element).getValue();
if (value != null && (element.type != 'submit' || (!submitted &&
submit !== false && (!submit || key == submit) && (submitted = true)))) {
if (key in result) {
// a key is already present; construct an array of values
if (!Object.isArray(result[key])) result[key] = [result[key]];
result[key].push(value);
}
else result[key] = value;
}
}
return result;
});