2012-05-14 46 views
0

我试图从一个和然后当它提交的值将值变成一个cookie。这是我的,但我想知道是否有办法做到这一点,所以我不必为所有变量写出同样的东西。设置表单元素的饼干

function submitValues(){ 

var firstName = document.forms["frm1"]["first_name"].value; 
var lastName = document.forms["frm1"]["last_name"].value; 
var number = document.forms["frm1"]["phNum"].value; 

setCookie("firstName",firstName,365); 
setCookie("lastName",lastName,365); 
setCookie("number",number,365); 
} 
+0

我不明白你是如何为所有的变量写同样的东西。这三个变量很可能有三个不同的值。 “同样的事情”的问题在哪里出现? –

+0

我相信他/她意味着将有更多的字段需要使用值而不是firstName,lastName和number来设置cookie。所以这个问题似乎是“是否有一种方法可以遍历所有的表单字段,并为表单中每个字段的相应值创建一个cookie?”而不必像上面所写的那样将每个值都声明为一个变量。 – sbeliv01

+0

是的,sbeliv01是对的,我没有做好提问的工作。有没有办法,我可以做到这一点与参数?当我有类似'[“frm1”] [“first_name”]。value;'并且在引号内有参数时它不起作用。 – user1290426

回答

2

如果你想设置Cookie为所有表单元素,使用DOM2 form.elements collection

var els = document.forms.frm1.elements; 
for (var i=els.length;i--;){ 
    setCookie(els[i].name, els[i].value, 365); 
} 

如果你想只有特定,然后再编写代码如下所示:

var els = document.forms.frm1.elements; 
var cookiesToSet = ['first_name','last_name','phNum']; 
for (var i=cookiesToSet.length;i--;){ 
    var name = cookiesToSet[i]; 
    setCookie(name, els[name].value, 365); 
} 

在上面,els[name]相当于document.forms.frm1.elements[name]

通常,JavaScript中每个对象的每个属性都可以通过“点符号”(foo.bar)或“括号表示法”(foo["bar"])访问。当属性名称不是有效标识符时(foo["names[]"]foo["12 freakin' whales!"]),或者从变量(foo[name]foo["item"+i])构造属性名称时,您必须使用后者。

2

你可以缩短它某种程度上被一个变量保存到窗体的引用,就像这样:

var form = document.forms["frm1"]; 

var firstName = form["first_name"].value; 
//...and so on 

甚至更​​多通过所有形式的<input>元素循环,从而缩短它:

var formInputs = document.forms["frm1"].getElementsByTagName("input"); 
for (var i=0;i<formInputs.length;i++) { 
    setCookie(formInputs[i].name, formInputs[i].value, 365); 
}