json化表单数据
/** * josn化表单数据 * @name baidu.form.json * @function * @grammar baidu.form.json(form[, replacer]) * @param {HTMLFormElement} form 需要提交的表单元素 * @param {Function} replacer 对参数值特殊处理的函数,replacer(string value, string key) * @returns {data} 表单数据js对象 */ form.json = form.json || function (form, replacer) { var elements = form.elements, replacer = replacer || function (value, name) { return value; }, data = {}, item, itemType, itemName, itemValue, opts, oi, oLen, oItem; /** * 向缓冲区添加参数数据 * @private */ function addData(name, value) { var val = data[name]; if(val){ val.push || ( data[name] = [val] ); data[name].push(value); }else{ data[name] = value; } } for (var i = 0, len = elements.length; i < len; i++) { item = elements[i]; itemName = item.name; // 处理:可用并包含表单name的表单项 if (!item.disabled && itemName) { itemType = item.type; itemValue = baidu.url.escapeSymbol(item.value); switch (itemType) { // radio和checkbox被选中时,拼装queryString数据 case 'radio': case 'checkbox': if (!item.checked) { break; } // 默认类型,拼装queryString数据 case 'textarea': case 'text': case 'password': case 'hidden': case 'file': case 'select-one': addData(itemName, replacer(itemValue, itemName)); break; // 多行选中select,拼装所有选中的数据 case 'select-multiple': opts = item.options; oLen = opts.length; for (oi = 0; oi < oLen; oi++) { oItem = opts[oi]; if (oItem.selected) { addData(itemName, replacer(oItem.value, itemName)); } } break; } } } return data; };