未分类
onmouseover & onmouseout
转载自:http://varnow.org/?p=104
问题描述
在很多情况下,我们需要这样的一种效果,当鼠标进入元素时做某些操作,而当鼠标离开元素时又做另外一些操作。很自然的我们会想到DOM事件中的 onmouseover和onmouseout事件,其中onmouseover表示的是当鼠标从元素之外移入元素时触发的事件,而onmouseout 则表示鼠标从元素移出时触发的事件。具体效果请看这个页面。
从页面的效果中可以看出以下两个问题:
当鼠标从当前元素进入到其子元素时会触发当前元素的onmouseout事件,也就是说视其离开了当前元素。
当子元素中发生onmouseove和onmouseout事件时,由于冒泡机制会被父元素捕获。
以上两个现象在实际应用中往往是多余而负面的,因为大多数需求不会把鼠标在内部移动当作mouseout,而是要求当鼠标真实的离开了元素所覆盖的区域时 才真正触发;此外,也不希望鼠标在元素内部移动时反复的触发mouseout和mouseover。因此,这两个问题是需要解决的。
解决方案
为了解决这两个问题,IE非常有才的引入了另外两个事件onmouseenter和onmouseleave,这两个事件恰好符合上述需求,不信试试这里。从这个例子中你会发现只有当鼠标真实离开了红色DIV覆盖的区域时才会触发onmouseleave事件,而且这两个事件无冒泡效果。此外,这两个事件还有setCapture的效果,即使你使用Ctrl+TAB把窗口来回切换,依然可以正确的触发事件。
因此,在IE下可以通过onmouseenter和onmouseleave轻松的解决以上问题。然后在FF以及其他浏览器中并没有引入这样的事件,于是自己折腾出这个方案。
JavaScript语言:
var t = document.getElementById(‘test’);
var status = document.getElementById(’status’);
//判断child是否是father的子孙结点
function isChild(father,child,self){
var up = self ? child:child.parentNode;
var is = false;
while(up){
if( up == father ){
is = true;
break;
}
up = up.parentNode;
}
return is;
}
//标识是否已经进入元素
var enter = false;
document.onmousemove = function(e){
e = e || event;
var target = e.target || e.srcElement;
//如果鼠标在子孙结点则忽略
if( isChild(t,target) ) return;
//第一次触发目标元素的mousemove则视为enter
if( !enter && target == t){
status.innerHTML += ‘<span style=”color: [...]
php/mysql的事务处理机制
MySQL5.X都已经发布好久了,但是还有很多人认为MySQL是不支持事务处理的,这不得不怪他们是孤陋寡闻的,其实,只要你的MySQL版 本支持BDB或InnoDB表类型,那么你的MySQL就具有事务处理的能力。这里面,又以InnoDB表类型用的最多,虽然后来发生了诸如Oracle 收购InnoDB等令MySQL不爽的事情,但那些商业上的斗争与技术无关,下面以InnoDB表类型为例简单说一下MySQL中的事务。
Table ‘******’ is read only问题解决
把windows 2003下mysql的data里的数据库复制到Centos下的mysql的data里面,可以查看。但是当对该数据库进行写入操作时候出现错误提示:#1036 - Table ‘xxxxx’ is read only.
解决方法为设置文件权限,然后重启,代码如下:
#sudo chmod -R 777 /var/lib/mysql/XXXX(数据库名)
#sudo /etc/init.d/mysql restart
