需要判断是代码触发的事件,还是人为认为操作触发的事件。
事件可以由外部源触发,同样也会以编程方式触发。
用到的知识点:
Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。事件通常与函数结合使用,函数不会在事件发生前被执行!
eventPhase 属性返回事件传播的当前阶段。它的值是下面的三个常量之一,它们分别表示捕获阶段(eventPhase=1)、正常事件派发(eventPhase=2)、起泡阶段(eventPhase=3)。
不同的触发条件,eventPhase 的值不一样,我们可以根据这个值来判断是哪种方式触发的。
PS:IE与Chrome的event.eventPhase判断值不一样
$(document).ready(function () {
//页面中插入一个input
inputHtml = "<input></input>";
$("body").append(inputHtml);
//获取浏览器信息,不同的浏览器判断条件不一样
var sys = getBrowserInfo();
var sys_type = sys.browser;
//给新添加的input一个委托事件,后面会有代码去触发
$("body").on("blur", "input", function (event) {
switch(sys_type){
case "msie":
if (event.eventPhase==3) {
alert("IE,我是手动触发");
}else{
alert("IE,我是js代码触发");
}
break;
case "chrome":
if (event.eventPhase==1) {
alert("chrome,我是手动触发");
}else{
alert("chrome,我是js代码触发");
}
break;
default:
alert("暂时无法判断!");
}
});
//代码触发这个事件,看看alert提示
$("input").blur();
//手动触发下,点击这个input,再失去光标,看看alert提示
});
//获取浏览器类型
function getBrowserInfo(){
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
var re =/(msie|firefox|chrome|opera|version).*?([\d.]+)/;
var m = ua.match(re);
Sys.browser = m[1].replace(/version/, "'safari");
Sys.ver = m[2];
return Sys;
}
IE与Chrome的event.eventPhase判断值不一样