我仍在学习更复杂的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 :(得分: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;
});