2014-01-28 27 views
2

我有一個表單,我試圖通過迭代元素並完成需要做的任何事情來爲其構建自定義驗證。

這是我的js代碼到目前爲止

$('#createClient').click(function (event) { 
    var formData = { 
     'clientbrandname': $("#createClientBrand").val(), 
     'surveyReferral': $("#createSurveyReferral").val(), 
     'GuestReferral': $("#createGuestReferral").val(), 
     'email': $("#createInviteEmail").val(), 
     'phone': $("#createPhoneNumber").val(), 
     'xampAccNumber': $('#createUserLimit').val(), 
     'logo': $('#createClientLogo').val(), 
     'Template': $('#createRefPage').val(), 
     'xampClient': $('#createAmplifierClient').val(), 
     'xampActive': $('#createAmpMembership').val(), 
     'sReferralID': $('#sReferralID').val(), 
     'gReferralID': $('#gReferralID').val() 
    }; 

    $(formData).each(function() { 
     alert($(this).val()); 
    }); 

}); 

有了這個代碼我遇到了一個錯誤(i.nodeName is undefined)我懷疑是從零件coming我在哪裏嘗試使用$(this).val()

Anyone可以爲這個問題提出解決方案?

回答

3

您正在遍歷一個對象。因此您需要在函數中調用名稱值對。

的$。每個()函數是不一樣的$(選擇器)。每個(),它是 用於迭代,排他地,在jQuery對象。 $ .each() 函數可用於迭代任何集合,無論它是否爲 對象或數組。

JsFiddle

$.each(formData, function(name, value) { 
     alert(name); //Alerts clientbrandname 
     alert(value); //Alerts the value from "$("#createClientBrand").val()" 
    }); 
+0

這是正確答案,gj! – Mike

+1

它實際上提醒0和[對象對象],然後它退出 – Geo

+0

現在嘗試........ – KingKongFrog

2

你真正想要的是這樣的:

$.each(formData, function(key, value) { 
    // ... 
}); 

$(...)功能$需要一個node或節點的數組。然後它返回的對象有方法#each,它遍歷節點。

現在有一個通用迭代器 - 上述方法使用 - 即$.each。這個函數需要任何類似數組的對象。

JavaScript中的{}對象可以表現爲像這樣的數組。

現在我想知道,您是否考慮使用serializeArray

+2

如果你想解釋爲什麼這是他/她真正想要的東西,這對讀者會更有益。 – crush

+1

你也通過使用$ .each而不是$(formData).each ... – Mike

+0

降低了代碼的可讀性。您還沒有真正解釋如何正確使用它來完成讀者的願望。 – crush

2

參照位於HEREjQuery文檔,它指出

一個通用的迭代函數,它可以用於無縫迭代 在兩個對象和數組。具有長度屬性 (如函數的參數對象)的數組和類似數組的對象通過數字索引從0到length-1迭代 。其他對象通過 它們的命名屬性進行迭代。

你試圖使用上associative array,無法通過數字索引來itereated。

以下是從上面提到的jQuery文檔頁面當你通過JavaScript對象到jQuery的構造函數($(...))要創建一個jQuery對象實例拉..

var obj = { one: 1, two: 2, three: 3, four: 4, five: 5 }; 
$.each(obj, function(i, val) { 
    $("#" + i).append(document.createTextNode(" - " + val)); 
}); 
+0

JavaScript中沒有類。 – crush

+0

確實,這是一個關聯數組。關鍵是它仍然不能通過數字索引進行迭代。 – Kevin

+0

關聯數組是關於爲映射使用散列算法的'Map'的PHP術語。它實際上是一個JavaScript對象。 – crush

2

。此實例具有length屬性,這會導致對象執行類似數組的操作

根據jQuery的文檔爲$.each

陣列,並用長度屬性陣列狀物體(例如,函數的參數對象)由數字索引進行迭代,從0到長度爲1的。

該解決方案不會爲你工作,因爲你沒有數值指標。

相反,你需要使用$.each功能,可以看到下面的其他形式:迭代之前

//Just a generic representation of your JavaScript object. 
var obj = { 
    myKey: 'myValue' 
}; 

$.each(obj, function (key, value) { 
    console.log(key); //Outputs 'myKey' 
    console.log(value); //Outputs 'myValue' 
}); 

這裏,obj尚未變成了jQuery對象。它沒有length屬性,所以不會像數組那樣處理。現在,屬性名稱將作爲第一個參數發送到回調函數,並且該屬性的值將作爲第二個參數發送。

相關問題