javascript - 防止选项在当前选择器中被禁用

标签 javascript jquery html

尝试提交表单时,guard[] 字段未提交,因为选择字段中的选项在提交时被禁用。

我正在使用的代码一旦选择,就会在所有选择中禁用该选项,但我正在寻找一种方法来使其选中的选项保持启用状态(即,如果我在第一个选择中选择“Dingo” Guard[] 名称中的选项,则第一个选择将启用 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>

最佳答案

查找所有选中的选项,然后删除禁用的关键字

普通 Javascipt

document.getElementById("#testform").addEventListener("submit",function (e) {
    var options = e.querySelector("option:checked"), option, i;
    for(i = 0; option = options[i]; i++) {
        option.removeAttribute("disabled");
    }
}, false);

jQuery

$("#testform").submit(function () {
    $('option:selected', this).removeProp("disabled");
});

关于javascript - 防止选项在当前选择器中被禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517897/

相关文章:

javascript - 如何使用react-native获取父 block 高度?

asp.net - 通过 JavaScript 在 CascadingDropDown 中选择项目并调用更新

javascript - CSS 预加载在 Google Chrome 之外不起作用

c# - 转义字符

javascript - jQuery 在点击事件动画后递增 css 属性的值

javascript - 使用 moment.js 处理 View 中的 php 日期的正确方法是什么?

javascript - 如何使用jquery获取所有选择选项值

css - 浏览器 - 插入 td 导致嵌套表格上方出现空间

html - 如何使文本适合所有 div 的宽度?

javascript - 使用js创建允许将可拖动元素放入其中的框