通过select值对众多变量进行分组的简单方法?

时间:2011-12-02 22:49:20

标签: javascript jquery sorting grouping simplify

谢谢你的期待。

我仍在学习更复杂的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;

这可能吗?或者我以最简单的方式完成了它?

欢迎任何评论或帮助,再次感谢

2 个答案:

答案 0 :(得分: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类分组,在每组中,您知道将有两个输入:一个具有.s类,另一个具有.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元素的类别为.set,并且可以在任何form元素下找到”。对于每个元素,您需要找到<input>类的.s元素的值,以及带有<input>的{​​{1}}元素的值类。然后,您只需将其添加到不断增长的.box变量中。

答案 1 :(得分:0)

如果您想要表单中的所有内容,则应使用serializeArray

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