6月30日的学习笔记

今天是六月的最后一天啦,这是就我本月的最后一篇博客了。这个博客也是在本月开始写的,本来还想一天写一篇的,还是有点坚持不下来,因为真的没有什么好些的,而且六月又是考试月,要复习功课的。但还是不错的,写了十几篇了,为自己鼓掌加油。

PHP中PDO的预处理语句

昨天在这个上面卡了好久啊,真个人都不好了,我用的是编辑器写php,语法全部是正确的,但就是运行不了,只能一步一步的改写再测试。
一开始我是这么写的:

$conn = new PDO("mysql:host=$server;dbname=$db",$user,$pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("INSERT INTO imgdemo1 (imgkey,productid,remark,del) VALUES (:imgkey,:productid,:remark,:del)");
$stmt->bindParam(":imgkey",$key);
$stmt->bindParam(":productid",$productid);
$stmt->bindParam(":remark",$_POST["remark"]);
$stmt->bindParam(":del",0);
$stmt->execute();

我真的感觉不到任何错误,语法检测没有错误,我怕是我那个变量名写错了,我一个一个字母的看啊,就是找不出任何错误。
卡了大概两个小时,快到0点的时候我总算试探除了bug的原因啊。 TMD竟然传递参数的时候不能直接赋值:

$stmt->bindParam(":del",0); //错误,不能直接赋值为0
$del = 0;
$stmt->bindParam(":del",$del);//正确

我从未见过如此丧心病狂的函数, 只怪我一个前端的不了解php后端。

GETBOUNDINGCLIENTRECT()

这个是js中的方法,获取元素距离浏览器可视区域的距离:

document.getElementById(“id”).getBoundingClientRect();
//返回一个ClientRect对象,有6个参数: height,width,top,bottom,left,right
height,width:获取元素的宽和高,不推荐使用,应为在IE中只返回4个属性: top,bottom,left,right.   
top: 返回元素上边框距离可视区域顶端的距离  
bottom: 返回元素下边框距离可视区域顶端的距离  
left: 返回元素左边框距离可视区域左端的距离  
right: 返回元素右边框距离可视区域左端的距离 

这样就可以很好的判断元素是不是进入了浏览器的可视区域了,比如:

obj.getBoundingClientRect().top < window.innerHeight  
//元素上边框进入了可视区域;
obj.getBoundingClientRect().bottom < window.innerHeight
//元素下边框进去可可视区域;
 如果这个元素比window.innerHieht要小的话:
obj.getBoundingClientRect().top>0 && obj.getBoundingClientRect().bottom < window.innerHeight  
//判断元素完全进入可视区域

判断字符串中各字符出现的次数

var str = "abcabbbbacddcbaa"; // 判断各字符出现的次数

var arr = str.split(""),temp = {};
for(i=0,l=arr.length;i<l;i++){
    temp[arr[i]]?temp[arr[i]]+=1:temp[arr[i]]=1;
}
temp  //Object {a: 5, b: 6, c: 3, d: 2}

简洁版本:

str.replace(/\w/g,function(i){
    temp[i]?temp[i]+=1:temp[i]=1;    
})

JQ获取被选中的RADIO,CHECKBOX的值

$("[name=radio]:checked").val(); //获取值
$("#id").prop("checked") //获取选中状态

JS目标外点击事件:
好比一个弹出框,我们点击一个区域或者按钮弹出了对话框或者DIV,然后我们再点击body,只要点击的不是某个区域,那么我们弹出的DIV消失:

$("body").click(function(e){
    var _con = $(".area");  //会触发原事件的区域
    if(!_con.is(e.target)&&_con.has(e.target).length===0){
    //判断此次点击事件的目标不是指定区域...
    }
})