2012-04-09 4 views
1

何か探しているものはほとんど見つかりませんでしたが、何かが分からない場合はごめんなさい。私は基本的に、JavaScript関数チェックをして、フォームがデータベースに入力される前にいくつかの選択ボックスのそれぞれが一意の値を持つことを確認しようとしています。JavaScript - 選択したボックス内の一意な値を確認してください

ありセレクトボックスの任意の数であるが、すべてはの形に似た名前のフォーマットに従うことができます:

operator_address_type_0 
operator_address_type_1 
operator_address_type_2 
etc. 

私はちょうどJavaScript関数は、選択のすべてをループに設定することができるかと思いましてユーザーに警告し、同じ値が見つかった場合は提出を停止します。

ありがとうございました。

編集:

ここでは、現在の選択ボックスの簡略化したHTMLを示します。データベースを照会することによってAJAXを介してロードされるテーブルがすべてロードされるので、私はそれを単純化しなければなりませんでした。

<select name="operator_address_type_0"> 
<option value="Main">Main</option> 
<option value="Payment">Payment</option> 
<option value="Poster">Poster</option> 
</select> 

<select name="operator_address_type_1"> 
<option value="Main">Main</option> 
<option value="Payment">Payment</option> 
<option value="Poster">Poster</option> 
</select> 

それはそのようなものですが、将来的にはより多くのオプションがあるかもしれない、私はただ一つだけメインアドレス、1つの支払いアドレス、1つのポスターアドレスなどがあることを確認したいような

+0

あなたはそのためのhtmlコードを表示できますか? – szajmon

+0

私の投稿を更新しました。うまくいけば、それはあなたのためにもう少し明確になります –

+0

値は、各選択ボックスで別々に、またはグローバルに一意でなければなりませんか? – szajmon

答えて

3

何か以下?

function checkDuplicates() { 
    var selects = document.getElementsByTagName("select"), 
     i, 
     current, 
     selected = {}; 
    for(i = 0; i < selects.length; i++){ 
    current = selects[i].selectedIndex; 
    if (selected[current]) { 
     alert("Each address type may not be selected more than once."); 
     return false; 
    } else 
     selected[current] = true; 
    } 
    return true; 
} 

デモ:http://jsfiddle.net/GKTYE/

これは選択をループし、重複が見つかった場合、停止、それぞれの選択されたインデックスを記録します。これは、すべての選択肢が同じ順序で同じオプションを持つことを前提としています。実際に選択された値をテストするには:

current = selects[i].options[selects[i].selectedIndex].value; 
+0

これはちょうど値が異なってもユーザーに常に警告するようです –

+0

私のためにここに働きます:http://jsfiddle.net/GKTYE/ – nnnnnn

+0

hmm、selectがテーブルの中にあるかどうかは重要ですか?私はそれを考えなかったでしょうか? –

関連する問題