-1

10 個の選択リストを持つフォームがあり、すべて同じ項目があります。項目は、PHP/MySQL 配列から取り込まれます。ユーザーは、選択リストごとに 1 つのアイテムを選択する必要があります。フォームを送信する前に、ユーザーが同じ項目を 2 回選択できないようにする必要があります。

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

javascript を使用して、select の値の変更時にイベント リスナーを追加します。その関数は、選択をループして、値を既に持っている値と比較した後、値をメモリに取り込みます。現在の選択に既に選択されているオプションがあることをループが検出した場合は、デフォルト値に戻して、小さなメッセージを表示します...

または、まだ変更イベントで、選択したばかりのアイテムの値を取得し、10 個の選択でこの値のすべてのアイテムを削除します。したがって、ユーザーには選択できるオプションしか表示されないため、最終的にユーザーには 1 つの選択肢しかありません。ただし、ユーザーが 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;  
    }    
}

次に、関数の else で、収集したデフォルトに従って値をリセットします。

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

私はコードを書きました。改善できると思いますが、あなたが求めたように機能します。

ドキュメントの後に読み込まれるように、body の下の script タグ内に配置します。

選択/ドロップダウン要素の 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 に答える