2011-12-02 6 views
0

お探ししてありがとうございます。selectの値によって多数の変数をグループ化する簡単な方法はありますか?

まだ複雑なjavascriptとjqueryコーディングを学んでいるので、私は次のことについて考えていない場合でも、可能であれば助けてもらえます。あなたが見ることができるよう 「

function Findbox5(myform, box1, box2, box3, box4, box5, Storeall, s1, s2, s3, s4, s5) 
    { 
    //store values 
    Myform = document.forms.myform; 
    box1 = Myform.box1.value; 
    box2 = Myform.box2.value; 
    box3 = Myform.box3.value; 
    box4 = Myform.box4.value; 
    box5 = Myform.box5.value; 
    s1 = Myform.s1.value; 
    s2 = Myform.s2.value; 
    s3 = Myform.s3.value; 
    s4 = Myform.s4.value; 
    s5 = Myform.s5.value; 

    //set as one string 

    Storeall = s1 + ":" + box1 + ";" + s2 + ":" + box2 + ";" + s3 + ":" + box3 + ";" + s4 + ":" + box4 + ";" + s4 + ":" + box5 + ";" ; 

    // next function... 

    } ' 

私は5つの入力ボックスを持っているとの関連:

は、私は(私は無関係な検証などのコードを削除した注意してください)、以下を行うためのより良い/単純/短い方法が必要です各ボックスごとに選択します(各選択には4つのオプションがあります:1,2,3,4)。ユーザーがボックスにデータを入力すると、関連するオプションが選択されます。すべてのボックスとオプションを入力してからフォームを送信する必要があります。

このデータはstoreallの下に格納された変数として私に電子メールで送られます。 1:1234; 2:1324; 1:3232; 4:5434; 2:3211;

このように、このデータは、別々の関数または同じものを使用して次のように単純化されます。1:1234-3232; 2:1324-3211; 4:5434;

これは可能ですか?または私はそれを最も簡単な方法でやったのですか?

任意のコメントや歓迎助け、おかげで再び

+0

はなぜ関数はパラメータを受け入れていますか? – Jon

答えて

0

まず、あなたはに対して反復することができる単一の要素にグループにこれらの事をお勧めします。あなたのHTMLがどのように見えるのであれば:今、あなたは、いくつかのこれらの要素の間で共通のではなく、単に別の名前/ IDを確立してきました

<form> 
    <div class="set"> 
     <input class="s" name="s1" /> 
     <input class="box" name="box1" /> 
    </div> 
    <div class="set"> 
     <input class="s" name="s2" /> 
     <input class="box" name="box2" /> 
    </div> 
    ... 
</form> 

<form> 
    <input name="s1" /> 
    <input name="box1" /> 
    <input name="s2" /> 
    <input name="box2" /> 
    ... 
</form> 

そして、それはのような何かをする、おそらく良いでしょう。各入力セットは.setクラスでグループ化され、各セット内には.sクラスと.boxクラスの2つの入力が存在することがわかります。今、jQueryを使ってそれらに対して反復処理するのは簡単です:

var str = ""; 
$("form div.set").each(
    function(index, element) 
    { 
     currentValueS = $(element).find("input.s").val(); 
     currentValueBox = $(element).find("input.box").val(); 
     str += currentValueS + ":" + currentValueBox + ";"; 
    } 
); 

これは、jQueryの.each()機能を使用しています。 .each()を使用すると、JQueryが指定されたセレクタから検出する各要素に対して実行する関数を提供できます。ここでは、セレクタがform div.setであることを意味します。これは、のすべてのdivの要素を持ち、form要素の下にあるすべての要素に適用されます。これらの要素のそれぞれについて、.sクラスの<input>要素の値、および.boxクラスを持つ<input>要素の値を見つける必要があります。次に、それらを成長するstr変数に追加します。

+0

助けてくださってありがとうございます。詳細な説明をお寄せいただきありがとうございます。これは、メールで送信された文字列を設定する簡単な方法ですが、それぞれのボックスデータを関連する「見出し」に保存しないと思っています。 編集:ifまたはswitch文を使って4つの変数(s1、s2など)のうちの1つにボックス値を格納できると思っただけです...この音は大丈夫ですか? –

0

フォームですべてのものをしたい場合、あなたはserializeArrayを使用する必要があります。彼らの値で何かをそれらを上書きするつもりはない場合

$('#my_form').submit(function() { 
    var str = ''; 
    $.each($(this).serializeArray(), function() { 
     str += this.name + ":" + this.value + ";"; 
    }); 
    sendByMail(str); 
    return false; 
}); 
関連する問題