-1

我有一个包含 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;
}
4

2 回答 2

0

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

将它放在正文下的脚本标签内,以便在文档之后加载。

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

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

http://jsfiddle.net/techsin/TK9aX/15/

i think i need better strategy to approach programming.

于 2013-08-06T07:42:31.080 回答
0

使用 javascript 在选择的值更改上添加事件侦听器。然后,该函数将在将其与已有的值进行比较后,循环遍历将值存入内存的选择。如果循环发现当前选择有一个已经被选中的选项,将其恢复为默认值并显示一条小消息...

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

从用户的角度来看,选项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;  
    }    
}

然后,在您的函数的 else 中,根据我们收集的默认值重置值:

else{
    alert('Duplicate!');
    document.getElementById('test' + i).value = defaultValues['test' + i];
    return false;
}
于 2013-08-05T20:10:55.907 回答