热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> AJAX编程>>正文内容

jquery 事件执行检测

发布时间:2010年03月16日点击数: 佚名

在写Web 应用,或者Web Ajax功能的时候我们经常需要处理事件,jquery已经非常完美的封装了事件,但是有时候事件的执行顺序还是会有微小差别
前两天做城市搜索的时候,我对搜索按钮绑定了事件,如果输入栏内的文字不符合要求就用标签提示(标签展示出来后对document绑定click,点击后隐
藏标签)并使输入栏获得焦点。就这样一个小功能我调试了、3个多小时,IE 里表现的是标签一闪而过,后来发现是按钮的点击事件和input的交替出发了
多次,估计是事件回退发生的,用了preventDefault() 和 stopPropagation()两个函数后修正了问题。虽然问题解决了,但是事件的执行顺序真是很难
掌握呀,于是我做了个简单的事件监测函数,可以自动记录页面事件触发,见如下代码(首先肯定要引入jquery!...)

  1. //事件执行监测 
  2. function eventsMonitor(op){ 
  3.     var defaultSetting = { 
  4.         eventsStr: "click focus blur"
  5.         splitStr: " "
  6.         css:{ 
  7.             "border":"1px red solid"
  8.             "z-index":9000000, 
  9.             "background":"white"
  10.             "position":"absolute"
  11.             width:400, 
  12.             height:200, 
  13.             "overflow-x":"hidden"
  14.             "overflow-y":"auto" 
  15.         } 
  16.     }; 
  17.     var ops = $.extend(true,defaultSetting,op);  
  18.     $('<div id="DivForLogEvents"><div></div><div>').appendTo("body").css(ops.css); 
  19.     var $infolog = $("#DivForLogEvents div:eq(0)"); 
  20.     $.each(ops.eventsStr.split(ops.splitStr),function(i,v){ 
  21.         if(v != 'resize'
  22.             $("*:not('#DivForLogEvents')").bind(v, function(e){                 
  23.                 if(!$(e.target).is("#DivForLogEvents") && !$(e.target).is($infolog)){ 
  24.                     $infolog.append((e.target.nodeName||" ") + "->" + (e.target.id||e.target.Name||" ") + " "+v+" event!<br>"); 
  25.                     $("#DivForLogEvents:not(:animated)").animate({scrollTop:$infolog.height()},300); 
  26.                 } 
  27.             }); 
  28.         else 
  29.             $(window).bind('resize', function(e){                 
  30.                 if(!$(e.target).is("#DivForLogEvents") && !$(e.target).is($infolog)){ 
  31.                     $infolog.append((e.target.nodeName||" ") + "->" + (e.target.id||e.target.Name||" ") + " "+v+" event!<br>"); 
  32.                     $("#DivForLogEvents:not(:animated)").animate({scrollTop:$infolog.height()},300); 
  33.                 } 
  34.             }); 
  35.     }); 

调用方法示例

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3.     <head> 
  4.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
  5.         <title>Untitled Document</title> 
  6.         <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script><!--Google CDN--> 
  7.         <script type="text/javascript" src="eventsMonitor.js"></script><!--Google CDN--> 
  8.         <script type="text/javascript"> 
  9.              
  10.             $(document).ready(function(){ 
  11.                 eventsMonitor({ 
  12.                     css:{top:0,right:20}, 
  13.                     eventsStr:"click blur focus select scroll mousewheel resize" 
  14.                 }); 
  15.                  
  16.                 $("#info").click(function(){$(this).text($("#DivForLogEvents").outerHeight());}); 
  17.             }); 
  18.              
  19.         </script> 
  20.     </head> 
  21.     <body> 
  22.          
  23.         Hello world 
  24.         <img src="http://images.cnblogs.com/logo_small.gif" /> 
  25.         <input type="text" id="name" value="测试" /> 
  26.         <span id="info">ffffffff</span> 
  27.          
  28.     </body> 
  29. </html> 

效果截图

 

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作