【问题标题】:Remove an option once it is selected in previous dropdowns在以前的下拉列表中选择一个选项后删除它
【发布时间】:2012-01-29 02:25:29
【问题描述】:

我需要删除在上一个 dropdwon 上选择的下拉列表中的选定选项。 例如,第一个、第二个和第三个下拉列表包含 A、B、C、D。一旦我在下拉列表 1 中选择了 A,它就不会出现在下拉列表 2 和 3 中。同样的事情会发生在下拉列表 2 和 3 中。强>

但在我的代码中,事情实际上是这样的:

我在 PHP 中通过循环填充了几个下拉列表。

for($y=1; $y<=5; $y++){
echo "<select id='seatplan$x' name='selectSeatplan[]' onChange='callSave($x,$sid)'>";

     echo "<select name='selectSeatplan[]'>";
     echo "<option value=''> ------------ </option>";
          seatplanDdNames($sid);
     echo "</select>";

} //END FOR Y<-5

请注意 * seatplanDdNames($sid) - 是一个从数据库中生成名称的函数,这就是我如何从中呼应选项:

function seatplanDdNames($sid) {
     echo "<option value='$studentno' onClick='callSave($x,$sid)'>$name</option>";
}

然后调用javascript函数保存:

function callSave(x,sid){

    var name = 'seatplan' + x;
    name = name.toString();
    var selectBox = document.getElementById(name);
    var strUser = selectBox.options[selectBox.selectedIndex].value;
    var js = document.createElement('script');
        js.setAttribute('language', 'javascript');
        js.setAttribute('type', 'text/javascript');
        js.setAttribute('src', 'seatplan-getvalues.php?uid='+strUser+'&sid='+sid+'&rtype=CLS&seatno='+x);
    document.body.appendChild(js);

    return false;
    } 
  • 函数 callSave 将选定的选项保存在临时表中。只是我喜欢它的方式。问题是,我必须避免下拉菜单中提供的数据冗余。

有什么帮助吗?谢谢!

【问题讨论】:

  • 您不想使用多选?还是复选框?似乎更符合您的需求。
  • 嗯,我这里有一个座位计划功能。每个学生将被分配到一个座位。下拉列表包含学生的姓名。 :)

标签: php javascript select drop-down-menu option


【解决方案1】:

Lolo 的代码运行良好,但我需要更改 o.disabled = true 中的 style.dispaly = 'none' 以避免 OSX 和 iOS 中的 Chrome/Safari 出现问题(元素未隐藏)

if (p == undefined || p == s) {
  o.disabled = false;
}
// option otherwise
else {
  o.disabled = true;
}

行为不同,但结果相同。

【讨论】:

    【解决方案2】:

    Here 是纯 HTML/JS 示例。基本上在页面加载时,每个选择都有相同的选项。当您选择某些内容时,在其他选择时此选项会隐藏。

    【讨论】:

    • 我需要多一点帮助,你能解释一下每行的代码行吗?我很难理解它。当每个选项中都设置了一个值时,该代码似乎不起作用。 :(谢谢!
    • 我写了一些 cmets jsfiddle.net/cUtTM/3 并且我发现了一个小错误,现在已经修复了。
    • 我可以在您的 php 代码中看到一些问题。在循环中,您回显 &lt;select&gt; 标记 2 次。使用我的 JS,您应该从选项中摆脱 onClick 处理程序。这里有更多防弹版本:jsfiddle.net/cUtTM/5。希望它会有所帮助。
    • 我在这里只有一些建议。使用 js cookie 来保存您的选择和选择。它的客户端和最有效的。不需要任何复杂的东西。你也可以用它来处理用户选择的变化..即收回并重做?
    • 我想我知道我的代码出了什么问题。父节点是div,对吧?我有几个,比如我的代码中有大量的 div。很抱歉这个回复太晚了。
    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 2017-01-11
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多