判断事件-手动触发与代码触发(外部源触发与编程方式触发)

需要判断是代码触发的事件,还是人为认为操作触发的事件。
事件可以由外部源触发,同样也会以编程方式触发。

用到的知识点:
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判断值不一样

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值