form表单转json对象
/**
* 自动将form表单封装成json对象
*/
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [ o[this.name] ];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
var formJson = $("#xxxForm").serializeObject();
//在formJson 里添加info信息
formJson ["info"] ="XXX";
serialize() 序列化表单元素为字符串
$("#form").serialize();
serializeArray()序列化表单元素为对象数组
$("#form").serializeArray();
JSON.stringify()将对象或者数组转换为JSON字符串
JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
返回包含 JSON 文本的字符串。
JSON.stringify(value[, replacer[, space]])
value: 必需, 要转换的 JavaScript 值(通常为对象或数组。
replacer: 可选。用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。
space:可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
获取form表单serializeArray()里为空的值
var flagParm = "";
for (var i = 0; i < $("#xxxForm").serializeArray().length; i++) {
if($("#xxxForm").serializeArray()[i].value=="" || $("#xxxForm").serializeArray()[i].value ==null){
flagParm += $("#xxxForminput[name='"+$("#xxxForm").serializeArray()[i].name+"']").attr("placeholder")+"、";
}
}
Jquery $.extend的使用
jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象。
/**
* 通用js方法封装处理
*/
(function ($) {
$.extend({
// 通用方法封装处理
common: {
// 判断字符串是否为空
isEmpty: function (value) {
if (value == null || this.trim(value) == "") {
return true;
}
return false;
},
// 判断一个字符串是否为非空串
isNotEmpty: function (value) {
return !$.common.isEmpty(value);
},
// 是否显示数据 为空默认为显示
visible: function (value) {
if ($.common.isEmpty(value) || value == true) {
return true;
}
return false;
},
// 空格截取
trim: function (value) {
if (value == null) {
return "";
}
return value.toString().replace(/(^\s*)|(\s*$)|\r|\n/g, "");
},
// 指定随机数返回
random: function (min, max) {
return Math.floor((Math.random() * max) + min);
}
}
});
})(jQuery);
$(function(){
$.zd.t1("ccc");
$.zd.t2();
$.zd.t3();
});
$.extend({
zd:{
t1:function(v){
console.log(v);
},
t2:function(){
console.log("222");
},
t3:function(){
console.log("333");
}
}
});
js数组里添加元素
var num= [];
num.push(value);
num.push(name);
js数组里删除元素
function removeArray(array, val) {
var index = array.indexOf(val);
if (index > -1) {
array.splice(index, 1);
}
}
//删除:
var test= ['1','2','3','4']
removeArray(test, '1');
js数组转字符串
var test= ['1','2','3','4']
test.join(',');//1,2,3,4 使用,拼接数组元素
js map里添加元素
var map = {};
map["name"] = name;
map["value"] = value;
js里each的使用
$.each(data, function (index, item) {
console.log(index);
console.log(item.name);
});
js里在onclick中传递json对象
直接传递对象在方法中会是一个object这个时候,在传递之前需要对对象进行格式编辑一下
return '<img style="cursor:hand" src="/xxx/pencil.png" title="修改" onclick="addAndUpdate('+JSON.stringify(record.json).replace(/"/g, '"')+');">';
js把方法作为参数传递
$(function(){
sentFunction(test1);
})
function test1(){//预传递的方法
alert('测试');
}
function sentFunction(p){//执行传递的方法
p();//执行参数表示的函数
}
ajax的作用域问题
在ajax外部有一个参数parma,参数是有值的
但是在ajax内的success方法中输出值却为undefined
var param = "1";
$ajax({
url:
data:
async:
success:function(data){
console.log(param);//undefined
}})
首先定义一个变量name 给name一个初始值(第一步)
然后在ajax里console一下name(第二步)
最后在ajax下方再console一下name (第三步)
测试发现 在同步或异步状态下 最后输出的结果都是:
在ajax内部打印的参数为初始值
推测可能跟ajax调用时间、变量在js里面的生命周期有关系
若ajax调用时间过长,可能会出现变量在ajax中为 undefined的效果
首先定义一个变量name 给name一个初始值(第一步)
然后在ajax里console一下name(第二步)
最后在ajax下方改变一下name的值再console一下name (第三步)
测试发现在ajax异步情况下,第一步为初始值,第二步和第三步相同都是改变后的值
程序顺序是: 第一步,第三步,第二步
测试发现在ajax同步情况下,第一步和第二步相同都是初始值,第三步是改变后的值
程序顺序是: 第一步,第二步,第三步
--------------------------
在ajax的success方法内定义的变量,如何将值传出success
首先 在ajax外,定义一个变量 name 直接console 设置为第一步
在ajax中对name进行了改变 然后console 设置为第二步
最后在ajax下方再console一下name 设置为第三步
浏览器调试发现:第一步 与第三步的值相同,都为初始值, 第二步输出的是改变后的值
而且程序输出的顺序是 第一步,第三步,第二步
虽然在ajax中对name变量进行了改变,但是出了ajax后该name变量却为初始值了。
这是因为ajax默认是异步调用
程序输出的顺序才是 第一步,第三步,第二步
将ajax的async设置为false(同步)
在浏览器发现 第一步为初始值,第二步为改变后的值,第三步为改变后的值
而且程序输出书序是 第一步 第二步 第三步
--------------------------