问题描述:

我有50行数据,我希望用户给他们1到50分。我把他们附近的下拉框选项1/50。但我想要的是,当用户选择15行(例如)的行,15将从其他行的所有其他选择标签删除。我在JavaScript中不如你。我怎样才能做到这一点?根据之前选择的<option>标签从<select>标签中删除<option>标签? (POLL示例)为


嗨卡萨布兰卡我不能让他脚本你发送工作。我需要它只在一个选择标签上工作,所以我给选择标签ID和表单ID也。我使用getElementsByTagID(选择标签的ID)编辑脚本getElementsByTagName以仅生成一个选择标签。但功能不触发?

+0

你使用jQuery或类似的图书馆吗? – arthurprs 2011-03-02 15:47:11

+0

我没有使用任何库。该网站是纯ASP。但我可以用你的建议来做任何事情。 – ciscogen 2011-03-02 16:23:24

EDIT1:ID - >类

给每个选项的类数是

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

然后jquery的可除去()中的项,类

$('。15')。remove();

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

编辑3:经过进一步考虑,上述方法会因需要不移除“选定”选项而变得更加复杂。无法找出确切的方法,但我认为在调用remove之前使用$(this).append()或类似的东西将类从“15”更改为“selected15”会使作业相当安全。

EDIT2:

正如北非谍影指出低于此不是一个理想的用户接口中的所有这种类型的输入。你可能想看看这个:http://www.utdallas.edu/~jrb048000/ListReorder/

允许用户拖放列表中的项目来对它们进行重新排序。更自然。

+2

'class'会比'id'更好的选择,因为具有相同ID的多个元素是非法的。 – casablanca 2011-03-02 15:55:28

+0

应该只有一个'id'的实例。如果超过1,'$('#15')'只能抓住第一个。 – 2011-03-02 16:01:06

这可能不是一个好主意,因为用户很难修改选择 - 例如,如果我想给15个不同的选项,我需要将旧的更改为其他选项然后将新的一个更改为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();"> 
+0

这很符合你说卡萨布兰卡。你是对的。提交时最后验证要好得多。我怎么想到这一点:)我会尝试你写的脚本。感谢您的快速回复。 ;) – ciscogen 2011-03-02 16:25:39

+0

嗨卡萨布兰卡我couldnt使它的工作。我需要它只在一个选择标签上工作,我也给它一个ID和一个ID。我使用getElementsByTagID(选择标签的ID)编辑脚本getElementsByTagName以仅生成一个选择标签。但功能不触发? – ciscogen 2011-03-03 07:31:30