回答
function serializeArray() {
return this.map(function() {
// Can add propHook for "elements" to filter or add form elements
var elements = jQuery.prop(this, "elements");
return elements ? jQuery.makeArray(elements) : this;
}).filter(function() {
var type = this.type;
// Use .is(":disabled") so that fieldset[disabled] works
return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !manipulation_rcheckableType.test(type));
}).map(function (i, elem) {
var val = jQuery(this).val();
return val == null ? null : jQuery.isArray(val) ? jQuery.map(val, function (val) {
return {
name: elem.name,
value: val.replace(rCRLF, "\r\n")
};
}) : {
name: elem.name,
value: val.replace(rCRLF, "\r\n")
};
}).get();
}
當然,這個假設this
是一個像.filter()
和.map()
方法jQuery對象。這些方法也可用於ECMAScript 5中的數組,因此如果您不需要支持IE < 9,則此代碼可能適用於其中this
是HTMLElements數組 - 在刪除或重寫jQuery處理的邊界情況之後。如果您需要支持舊瀏覽器,那麼您可能應該只使用jQuery。
Perahaps **僅使用JavaScript **不清楚。好的,* jQuery是javascript *,但我認爲OP不想使用任何jQuery函數。 – RobG
jQuery的:input
選擇等同於:
var elements = document.querySelectorAll('input, button, textarea, select');
元件將匹配的元素的靜態集合。使用每個不同的標籤名稱可以使用getElementsByTagName構建類似的陣列。
.serializeArray
創建ojbects的像的數組:
[{name: value},{name:value},...];
要連載元件,跟隨在HTML5規格§4.10.22 Form submission的算法。請注意,jQuery不提交提交按鈕(這與W3C規範和瀏覽器行爲相反),您可能希望模擬該提交按鈕(或不按)。
在SajithNair的評論中有一個good link,它不是完美的,但是是一個非常好的開始(說98%的方式)。
基本策略是循環遍歷成員並處理每種不同的類型,從成功的控件創建對象(即那些具有名稱和值並且未被禁用的對象,並檢查無線電和複選框輸入並選擇對於選擇中的選項,記住要處理多個選擇),其唯一成員是具有元素值的元素名稱。
如果有多個控件相同,則會有多個具有相同命名屬性的對象,但可能有不同的值(或不同)。
要做到這一點的代碼並不困難,但要徹底編寫和測試有點冗長乏味。當你陷入困境時,請去尋求幫助。
這裏是一個非常簡單的方法,對於大多數形式的作品:
[].slice.call(document.querySelectorAll('input[name]:not([disabled]), textarea[name]:not([disabled]), select[name]:not([disabled])')).reduce(function(a,b,i){
var val= String({checkbox:1,radio:1}[b.type] ? b.checked : b.value).replace(/\r?\n/g, "\r\n");
a[b.name]= a[b.name] ? a[b.name].concat(val) :val;
return a;
}, {});
它不處理命名的提交或圖像類型,像一個真正的形式,但這些輸入的適用性真的只有在點擊的時候知,因此對於手動串行器沒有意義。你可以使用幾個onclicks來模擬傳統的圖像輸入功能和命名提交,如果這真的是你需要的,它可能不是......
此版本使用key:value對的平面對象或重複值的key:[value1,value2]數組。
- 1. 使用JQuery serializeArray
- 2. jQuery:試圖使用serializeArray()
- 3. jQuery .serializeArray()返回空數組
- 4. jQuery serializeArray()all:inputs
- 5. 收音機不serializeArray
- 6. 最有用的jQuery本地API函數
- 7. 在Rails窗體中使用jQuery的serializeArray
- 8. jQuery的serializeArray失敗
- 9. 添加到jQuery serializearray()
- 10. jQuery的serializeArray()WordPress的
- 11. jQuery的崗位+ serializeArray
- 12. Ajax .serializeArray()函數和其他東西
- 13. 使用jQuery在JS變量中存儲HTML表單數據serializeArray
- 14. 從jQuery和serializearray獲取JSON數組()
- 15. jQuery SerializeArray/Param獲取類名?
- 16. Jquery - SerializeArray()通過編號
- 17. jQuery SerializeArray和Not選擇器
- 18. jQuery serializeArray()JSON字符串
- 19. jQuery的serializeArray()的鍵值對
- 20. jQuery的serializeArray不會在Safari
- 21. 在jQuery函數使用PHP腳本的
- 22. 如何使用 「本地WiFi API」 用Delphi的Windows API函數
- 23. vim腳本「input()」函數不需要用戶點擊輸入
- 24. 從隱藏的<input>獲取值並在jQuery函數中使用
- 25. PHP foreach()函數和<input />函數用於MySQL數據庫
- 26. 使用API函數在Javascript
- 27. 在訪問HTML <input>使用jQuery
- 28. 使用jQuery計算<input type =「date」
- 29. 使用input時NameError()
- 30. 使用serializearray從jquery對象返回文件名
http://stackoverflow.com/questions/11661187/form-serialize-javascript-no-framework – SajithNair