前言
在我们的学习与工作中,总会遇到一些问题,如果不进行总结与记录,我们很快就会忘记,,,
1、jquery ajax 中不能给变量赋值的原因及解决办法
我们在用JQuery的Ajax从后台提取数据后想把它赋值给全局变量,但是却怎么都赋不进,为什么呢?
原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去,所以只要改成同步操作就行
解决办法:
把异步改成同步,如下,加上async: false,它就能赋值了
var user = null
$.ajax({
url: "/user/findByName",
type: "get",
dataType: "json",
async: false,
data: {
name:name
},
success:function (data){
if (data.data.user!=null){
user = data.data.user
}
}
})
2、将日期转换为指定的格式
为Date原型添加如下的方法
Date.prototype.format = function(fmt) {
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
};
if(/(y+)/.test(fmt)) {
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o) {
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
添加完之后,我们可以这样调用
var time = new Date().format("yyyy-MM-dd hh:mm:ss");
console.log(time1);
也可以这样调用
var time1 = new Date().format("yyyy-MM-dd");
console.log(time1);
3、对于jQuery使用append追加的节点无法添加事件无效的解决方法
有时我们在新添加的元素中的事件失效,其原因是我们在初始化事件的时候,并没有这些新添加的元素,所以就不能绑定事件。
为此,我们需要jQuery中的on方法绑定事件。不能直接添加相应的事件,以click事件为例
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("div").on("click","p",function(){
$(this).slideToggle();
});
$("button").click(function(){
$("<p>This is a new paragraph.</p>").insertAfter("button");
});
});
</script>
</head>
<body>
<div style="background-color:yellow">
<p>This is a paragraph.</p>
<p>Click any p element to make it disappear. Including this one.</p>
<button>Insert a new p element after this button</button>
</div>
</body>
</html>