【发布时间】:2015-05-28 22:08:30
【问题描述】:
尝试提交我的表单时,guard[] 字段未提交,因为选择字段中的选项在提交时被禁用。
我正在使用的代码一旦选择就会禁用所有选择的选项,但我正在寻找一种方法来保持它为选择它的那个选项启用(即,如果我在第一个选择中选择“Dingo”选项,则第一个选择将启用 Dingo,而第二个和第三个选择将禁用它。)代码附在下面。
我正在寻找一种从 TagName 获取元素 ID 的方法(如我的代码注释中所见),或者在提交表单之前重新启用禁用选项的方法。
JS/JQ:
function disableGuards(selectOption)
{
var selectedGuards = [];
var allGuards = document.getElementsByName("guard[]");
var editedSelect = selectOption.id;
for (var i = 0; i < allGuards.length; i++)
{
selectedGuards.push(allGuards[i].value);
}
for (var i = 0; i < allGuards.length; i++)
{
var options = allGuards[i].getElementsByTagName("option");
for (var o = 1; o < options.length; o++)
{
var val = options[o].value;
var chosen = selectedGuards.indexOf(val);
var myvalue = allGuards[i].value;
options[o].disabled = (chosen != -1 && val != (myvalue && "NONE") /*&& editedSelect != a way to get the elementId from TagName*/);
}
}
if (document.getElementById("guard1").value == "RAND")
{
document.getElementById("guard2").disabled = true;
document.getElementById("guard3").disabled = true;
}
else
{
document.getElementById("guard2").disabled = false;
document.getElementById("guard3").disabled = ((document.getElementById("guard2").value == "NONE") ? true : false);
}
}
HTML:
<select name='guard[]' style='width:100%' id='guard1' onChange='disableGuards(this)'>
<option selected disabled>1st Choice...</option>
<option value='RAND'>No Preferences, Please Assign an Instructor</option>
<option value='Dingo'>Dingo</option>
<option value='Mike'>Mike</option>
<option value='Stephanie'>Stephanie</option>
<option value='Zach'>Zach</option>
</select>
<br>
<select name='guard[]' style='width:100%' id='guard2' onChange='disableGuards(this)'>
<option selected disabled>2nd Choice...</option>
<option value='NONE'>No 2nd Preference</option>
<option value='Dingo'>Dingo</option>
<option value='Mike'>Mike</option>
<option value='Stephanie'>Stephanie</option>
<option value='Zach'>Zach</option>
</select>
<br>
<select name='guard[]' style='width:100%' id='guard3' onChange='disableGuards(this)'>
<option selected disabled>3rd Choice...</option>
<option value='NONE'>No 3rd Preference</option>
<option value='Dingo'>Dingo</option>
<option value='Mike'>Mike</option>
<option value='Stephanie'>Stephanie</option>
<option value='Zach'>Zach</option>
</select>
【问题讨论】:
-
您可以使第二个和第三个选择成为动态的,因此一旦做出第一个选择,它就会用左边的选项填充第二个选择,然后用剩下的选项填充第三个选择。那是你要的吗?如果他们第一次选择 Mike,那么第二个和第三个选项不应该是 Mike
-
您是否尝试过为此使用 jQuery 的 .submit() 事件?将其绑定到您的表单并启用事件函数内的选择
-
@EasyBB 它现在的工作方式,如果我从任何字段中选择任何内容,它将在其他字段中禁用。因此,如果我从第二个字段中选择“Zach”,它将在第一个和第三个字段中禁用它。不幸的是,它还在第二个字段中禁用了它,所以我想要一种方法让它在提交时不禁用或重新启用。我正在研究 lucasnadalutti 建议的 jQuery .submit,但我无法让它正常工作。
-
试试我的答案代码并告诉我它是否有效,因为我无法从这里测试它。
标签: javascript jquery html