我有50行数据,我希望用户给他们点数1到50.我把选项1/50附近的下拉框放在他们附近。但我想要的是当用户为一行选择15(例如)时,将从其他行的所有其他选择标记中删除15。我在JavaScript中不如你。我怎么能做到这一点?
嗨卡萨布兰卡,我不能让他编写你发送作品的脚本。我需要它只处理一个选择标记,所以我也给select标签一个ID和一个表格ID。我使用getElementsByTagID编辑脚本getElementsByTagName(选择标记的ID)以仅影响一个选择标记。但功能没有触发?
答案 0 :(得分:0)
EDIT1:id - >类
为每个选项提供数字类
<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();">