JavaScript验证,防止重复输入字段

JavaScript验证,防止重复输入字段,javascript,forms,Javascript,Forms,我有一个表单,有10个选择列表,所有列表都有相同的项目。这些项是从PHP/MySQL数组填充的。用户需要为每个选择列表选择一个项目。我需要防止用户在提交表单之前两次选择同一项 function checkDropdowns(){ var iDropdowns = 10; var sValue; var aValues = new Array(); var iKey = 0; for(var i = 1; i <= iDropdowns; ++i

我有一个表单,有10个选择列表,所有列表都有相同的项目。这些项是从PHP/MySQL数组填充的。用户需要为每个选择列表选择一个项目。我需要防止用户在提交表单之前两次选择同一项

function checkDropdowns(){
    var iDropdowns = 10;  

    var sValue;
    var aValues = new Array();
    var iKey = 0;
    for(var i = 1; i <= iDropdowns; ++i){
        sValue = document.getElementById('test' + i).value;
        if ( !inArray(sValue, aValues) ){
            aValues[iKey++] = sValue;  
        }else{
            alert('Duplicate!');
            return false;
        }
    }    
    return true;
}
函数检查下拉列表(){
var iDropdowns=10;
var值;
var aValues=新数组();
var-iKey=0;

对于(var i=1;i使用javascript在selects的值更改上添加一个事件侦听器。然后,该函数将通过selects循环,并在将值与已选择的值进行比较后将值放入内存中。如果循环发现当前select有一个已选择的选项,则将其放回默认值并显示我有一个小消息

或者,仍然在更改事件中,获取刚刚选择的项目的值,并删除10个选择中具有此值的所有项目。因此,最终用户将只有1个选择,因为他只能看到他可以选择的选项。但是,请小心,如果用户在一个选择上改变了主意,请确保您首先添加回您删除的选项

从用户的角度来看,选项2更受欢迎,您将减少挫折感

编辑: 您提供的代码已经做了很多工作…现在您只需要在更改无效时恢复更改:

var defaultValues = [];
function onLoadSelect(){//Please execute this on document load, or any event when the select are made available.
    var iDropdowns = 10;
    var iKey = 0;
    for(var i = 1; i <= iDropdowns; ++i){
        var sValue = document.getElementById('test' + i).value;
        defaultValues['test' + i] = sValue;  
    }    
}

我已经编写了代码,我认为它可以改进,但它可以按照您的要求工作

将其放在正文下的内部脚本标记中,以便在文档之后加载

将选择/下拉元素的id名称放入id数组中

看一看://花了我3个小时


我想我需要更好的策略来进行编程。

你尝试了什么?(没有人会在这样的情况下为你编写代码)除非你显示你已经付出了一些努力:P10选择具有相同项目的列表。如果它们是相同的顺序,那么它们将具有相同的索引。如何检查以确定所选索引中没有一个是相同的吗?检查每个列表的索引。虽然我个人认为从下面的列表T中移除该项。o完全避免它。@DaveNewton+1用于删除项目…最好是用户友好的,而不是懒惰的:)使用。当选择一个值时,循环通过另一个值并禁用该选项。这应该很容易,尤其是当它们都具有相同的索引时。当禁用某个选项时,它仍在下拉列表中,但通常会变灰且不可单击。顺便说一句,我看到这是您的第一个问题…请下次在提问之前尝试一些东西,并向我们展示您所做的,这对我们所有人来说都会更容易。现在,由于您只提出了一个想法,我已经用我的回答了。如果您将您的问题更新为更有用的内容,我可以修改我的回答:)欢迎回家注意:::id名称不必按顺序排列,也不必按第一、第二……它们可以被命名为任何名称。穆罕默德。这段代码太棒了!不过我有一个小问题。提交表单时POST变量为空。你知道为什么吗?
else{
    alert('Duplicate!');
    document.getElementById('test' + i).value = defaultValues['test' + i];
    return false;
}