0

見てくれてありがとう。

私はまだより複雑な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; のようなものになります。

だから私がしたいのは、このデータを別の関数または同じ関数で次のように単純化することです。

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

コメントやヘルプを歓迎します。ありがとうございます

4

2 に答える 2

0

最初に、これらのものを反復可能な単一の要素にグループ化する必要があります。したがって、HTML が次のようになっているとします。

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

次に、おそらく次のようなことを行う方が良いでしょう:

<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>

これで、名前/ID が異なるだけでなく、これらの要素間にいくつかの共通点が確立されました。入力の各セットはクラスごとにグループ化され、.set各セット内には 2 つの入力があることがわかっています。1 つは.sクラスで、もう 1 つは.boxクラスです。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.setform<input>.s<input>.boxstr

于 2011-12-02T23:02:52.657 に答える
0

フォーム内のすべてが必要な場合は、次を使用する必要がありますserializeArray

$('#my_form').submit(function() {
  var str = '';
  $.each($(this).serializeArray(), function () {
      str += this.name + ":" + this.value + ";";
  });
  sendByMail(str);
  return false;
});
于 2011-12-02T23:19:27.060 に答える