根据以前选择的<option>标签从<select>标签中删除<option>? (POLL示例)</option> </select> </option>

时间:2011-03-02 15:42:35

标签: javascript html

我有50行数据,我希望用户给他们点数1到50.我把选项1/50附近的下拉框放在他们附近。但我想要的是当用户为一行选择15(例如)时,将从其他行的所有其他选择标记中删除15。我在JavaScript中不如你。我怎么能做到这一点?


嗨卡萨布兰卡,我不能让他编写你发送作品的脚本。我需要它只处理一个选择标记,所以我也给select标签一个ID和一个表格ID。我使用getElementsByTagID编辑脚本getElementsByTagName(选择标记的ID)以仅影响一个选择标记。但功能没有触发?

2 个答案:

答案 0 :(得分:0)

EDIT1:id - &gt;类

为每个选项提供数字类

<option class="15">15</option>
<option class="16">16</option>

然后jquery可以按类

删除()项目

$(” 15' )除去();

显然必须做一个改变并获得刚设置的值。 “remove()”在这个例子中很不错,因为我相信它会拉动该类的每个实例。

EDIT3:进一步考虑后,由于不需要删除“选定”选项,上述方法会更加复杂。不会弄清楚确切的方法,但我认为在调用删除之前用$(this).append()或类似的东西将类从“15”更改为“selected15”将相当安全地完成工作。

EDIT2:

如下面的casblanca所述,对于这种类型的输入,这根本不是理想的用户界面。您可能需要查看此内容:http://www.utdallas.edu/~jrb048000/ListReorder/

允许用户拖放列表中的项目以对其重新排序。更加自然。

答案 1 :(得分:0)

这可能不是一个好主意,因为用户很难修改选择 - 例如,如果我想给另一个选项提供15,我需要将旧的更改为其他选项然后,一旦分配了所有点,就不可能进行任何更改,因为所有选项都已消失。

更好的想法是让用户做他/她想要的任何事情,然后最终验证表格。你可以这样做:

function validate() {
  var used = []; // This array stores already used options

  var rows = document.getElementById('myForm').getElementsByTagName('select');
  for (var i = 0; i < rows.length; i++) {
    var points = rows[i].value;
    if (used[points]) {
      // This value was already used
      alert('Please choose a different value.');
      rows[i].focus();
      return false;
    } else {
      // This value was not used before; mark it as used now
      used[points] = true;
    }
  }
  return true;
}

并在表单的onsubmit处理程序中调用此函数:

<form id="myForm" onsubmit="return validate();">