2012-05-14 73 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); 
}