jquery 事件执行检测代码

 更新时间:2009年12月09日 04:20:30   作者:  
在写Web 应用,或者Web Ajax功能的时候我们经常需要处理事件,jquery已经非常完美的封装了事件,但是有时候事件的执行顺序还是会有微小差别
前两天做城市搜索的时候,我对搜索按钮绑定了事件,如果输入栏内的文字不符合要求就用标签提示(标签展示出来后对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);
$('<div id="DivForLogEvents"><div></div><div>').appendTo("body").css(ops.css);
var $infolog = $("#DivForLogEvents div: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!<br>");
$("#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!<br>");
$("#DivForLogEvents:not(:animated)").animate({scrollTop:$infolog.height()},300);
}
});
});
}

调用方法示例
复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script><!--Google CDN-->
<script type="text/javascript" src="eventsMonitor.js"></script><!--Google CDN-->
<script type="text/javascript">

$(document).ready(function(){
eventsMonitor({
css:{top:0,right:20},
eventsStr:"click blur focus select scroll mousewheel resize"
});

$("#info").click(function(){$(this).text($("#DivForLogEvents").outerHeight());});
});

</script>
</head>
<body>

Hello world
<img src="/upload/2009-12/20091209042029557.gif" />
<input type="text" id="name" value="测试" />
<span id="info">ffffffff</span>
</body>
</html>

效果截图

相关文章

  • jQuery select自动选中功能实现方法分析

    jQuery select自动选中功能实现方法分析

    这篇文章主要介绍了jQuery select自动选中功能,结合实例形式分析了jQuery实现select响应与级联菜单显示相关功能与操作技巧,需要的朋友可以参考下
    2016-11-11
  • php结合imgareaselect实现图片裁剪

    php结合imgareaselect实现图片裁剪

    这篇文章主要介绍了php结合imgareaselect实现图片裁剪的相关资料,需要的朋友可以参考下
    2015-07-07
  • JQuery实现列表中复选框全选反选功能封装(推荐)

    JQuery实现列表中复选框全选反选功能封装(推荐)

    在做列表时经常会遇到全选,反选进行批量处理问题。通过本文给大家介绍JQuery实现列表中复选框全选反选功能封装,对jq复选框全选反选功能感兴趣的朋友一起看看吧
    2016-11-11
  • jquery超简单实现手风琴效果的方法

    jquery超简单实现手风琴效果的方法

    这篇文章主要介绍了jquery超简单实现手风琴效果的方法,只需要几行代码即可实现手风琴效果的样式变换功能,需要的朋友可以参考下
    2015-06-06
  • jQuery验证表单格式的使用方法

    jQuery验证表单格式的使用方法

    本文给大家讲解关于此jQuery验证的一些标记以及使用方法,非常不错,具有参考借鉴借鉴价值,需要的朋友参考下
    2017-01-01
  • jquery实现拖拽调整Div大小

    jquery实现拖拽调整Div大小

    这里给大家分享的是一段自己编写的使用jQuery实现拽调整Div层大小的代码,非常实用,推荐给有需要的小伙伴们。
    2015-01-01
  • jquery.validate.js插件使用经验记录

    jquery.validate.js插件使用经验记录

    工作中使用到了jquery.validate.js插件,下面将其用法整理一下,方便以后使用
    2014-07-07
  • jquery使用filter()控制子元素显示隐藏

    jquery使用filter()控制子元素显示隐藏

    一般元素下的多个指定子元素显示隐藏效果,使用css中的选择器:nth-child()、:nth-of-type(),但如果想使用JavaScript动态控制,就需要用到jquery的filter()方法
    2023-08-08
  • formvalidator验证插件中有关ajax验证问题

    formvalidator验证插件中有关ajax验证问题

    jquery formvalidator插件是不错的国产验证插件了,做点普通的校验也是很方便的,但最近遇到个问题,发现如果表单整个表单是AJAX提交时,就不能按传统的做法了
    2013-01-01
  • 非常有用的40款jQuery 插件推荐(系列二)

    非常有用的40款jQuery 插件推荐(系列二)

    jQuery 是一个非常优秀的 JavaScript 框架,在现在的 Web 开发项目中扮演着重要角色。jQuery 使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入一些非常好的效果,让网站有更好的可用性和用户体验
    2011-12-12

最新评论