作者:手机用户2502906803 | 来源:互联网 | 2018-06-15 03:32
前两天做城市搜索的时候,我对搜索按钮绑定了事件,如果输入栏内的文字不符合要求就用标签提示(标签展示出来后对document绑定click,点击后隐藏标签)并使输入栏获得焦点。就这样一个小功能我调试了、3个多小时,IE 里表现的是标签一闪而过,后来发现是按钮的点击事件和input的交替出发了多次,估计是事件回退发生的,用了preventDefault() 和 stopPropagation()两个函数后修正了问题。虽然问题解决了,但是事件的执行顺序真是很难掌握呀,于是我做了个简单的事件监测函数,可以自动记录页面事件触发,见如下代码(首先肯定要引入jquery!...)
代码如下:
//事件执行监测 function eventsMonitor(op){ var defaultSetting = { eventsStr: "click focus blur", splitStr: " ", css:{ "border":"1px red solid", "z-index":9000000, "background":"white", "position":"absolute", width:400, height:200, "overflow-x":"hidden", "overflow-y":"auto" } }; var ops = $.extend(true,defaultSetting,op); $('
').appendTo("body").css(ops.css); var $infolog = $("#DivForLogEvents p:eq(0)"); $.each(ops.eventsStr.split(ops.splitStr),function(i,v){ if(v != 'resize') $("*:not('#DivForLogEvents')").bind(v, function(e){ if(!$(e.target).is("#DivForLogEvents") && !$(e.target).is($infolog)){ $infolog.append((e.target.nodeName||" ") + "->" + (e.target.id||e.target.Name||" ") + " "+v+" event! "); $("#DivForLogEvents:not(:animated)").animate({scrollTop:$infolog.height()},300); } }); else $(window).bind('resize', function(e){ if(!$(e.target).is("#DivForLogEvents") && !$(e.target).is($infolog)){ $infolog.append((e.target.nodeName||" ") + "->" + (e.target.id||e.target.Name||" ") + " "+v+" event! "); $("#DivForLogEvents:not(:animated)").animate({scrollTop:$infolog.height()},300); } }); }); }
调用方法示例
代码如下:
Hello world ffffffff
效果截图