jquery 事件執(zhí)行檢測代碼
更新時(shí)間:2009年12月09日 04:20:30 作者:
在寫Web 應(yīng)用,或者Web Ajax功能的時(shí)候我們經(jīng)常需要處理事件,jquery已經(jīng)非常完美的封裝了事件,但是有時(shí)候事件的執(zhí)行順序還是會(huì)有微小差別
前兩天做城市搜索的時(shí)候,我對搜索按鈕綁定了事件,如果輸入欄內(nèi)的文字不符合要求就用標(biāo)簽提示(標(biāo)簽展示出來后對document綁定click,點(diǎn)擊后隱藏標(biāo)簽)并使輸入欄獲得焦點(diǎn)。就這樣一個(gè)小功能我調(diào)試了、3個(gè)多小時(shí),IE 里表現(xiàn)的是標(biāo)簽一閃而過,后來發(fā)現(xiàn)是按鈕的點(diǎn)擊事件和input的交替出發(fā)了多次,估計(jì)是事件回退發(fā)生的,用了preventDefault() 和 stopPropagation()兩個(gè)函數(shù)后修正了問題。雖然問題解決了,但是事件的執(zhí)行順序真是很難掌握呀,于是我做了個(gè)簡單的事件監(jiān)測函數(shù),可以自動(dòng)記錄頁面事件觸發(fā),見如下代碼(首先肯定要引入jquery!...)
//事件執(zhí)行監(jiān)測
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);
}
});
});
}
調(diào)用方法示例
<!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>
復(fù)制代碼 代碼如下:
//事件執(zhí)行監(jiān)測
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);
}
});
});
}
調(diào)用方法示例
復(fù)制代碼 代碼如下:
<!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實(shí)現(xiàn)當(dāng)鼠標(biāo)停留在某區(qū)域3秒后自動(dòng)執(zhí)行
- JQuery給元素綁定click事件多次執(zhí)行的解決方法
- jquery阻止后續(xù)事件只執(zhí)行第一個(gè)事件
- jQuery綁定事件不執(zhí)行但alert后可以正常執(zhí)行
- jquery $.ajax各個(gè)事件執(zhí)行順序
- JQuery 給元素綁定click事件多次執(zhí)行的解決方法
- 淺析jquery如何判斷滾動(dòng)條滾到頁面底部并執(zhí)行事件
- Jquery on方法綁定事件后執(zhí)行多次的解決方法
- JQuery中DOM加載與事件執(zhí)行實(shí)例分析
- 淺談js在html中的加載執(zhí)行順序,多個(gè)jquery ready執(zhí)行順序
- 使用jQuery加載html頁面到指定的div實(shí)現(xiàn)方法
- Jquery在指定DIV加載HTML示例代碼
- jQuery實(shí)現(xiàn)在HTML文檔加載完畢后自動(dòng)執(zhí)行某個(gè)事件的方法
相關(guān)文章
jQuery select自動(dòng)選中功能實(shí)現(xiàn)方法分析
這篇文章主要介紹了jQuery select自動(dòng)選中功能,結(jié)合實(shí)例形式分析了jQuery實(shí)現(xiàn)select響應(yīng)與級聯(lián)菜單顯示相關(guān)功能與操作技巧,需要的朋友可以參考下2016-11-11
php結(jié)合imgareaselect實(shí)現(xiàn)圖片裁剪
這篇文章主要介紹了php結(jié)合imgareaselect實(shí)現(xiàn)圖片裁剪的相關(guān)資料,需要的朋友可以參考下2015-07-07
JQuery實(shí)現(xiàn)列表中復(fù)選框全選反選功能封裝(推薦)
在做列表時(shí)經(jīng)常會(huì)遇到全選,反選進(jìn)行批量處理問題。通過本文給大家介紹JQuery實(shí)現(xiàn)列表中復(fù)選框全選反選功能封裝,對jq復(fù)選框全選反選功能感興趣的朋友一起看看吧2016-11-11
jquery超簡單實(shí)現(xiàn)手風(fēng)琴效果的方法
這篇文章主要介紹了jquery超簡單實(shí)現(xiàn)手風(fēng)琴效果的方法,只需要幾行代碼即可實(shí)現(xiàn)手風(fēng)琴效果的樣式變換功能,需要的朋友可以參考下2015-06-06
jquery實(shí)現(xiàn)拖拽調(diào)整Div大小
這里給大家分享的是一段自己編寫的使用jQuery實(shí)現(xiàn)拽調(diào)整Div層大小的代碼,非常實(shí)用,推薦給有需要的小伙伴們。2015-01-01
jquery.validate.js插件使用經(jīng)驗(yàn)記錄
工作中使用到了jquery.validate.js插件,下面將其用法整理一下,方便以后使用2014-07-07
formvalidator驗(yàn)證插件中有關(guān)ajax驗(yàn)證問題
jquery formvalidator插件是不錯(cuò)的國產(chǎn)驗(yàn)證插件了,做點(diǎn)普通的校驗(yàn)也是很方便的,但最近遇到個(gè)問題,發(fā)現(xiàn)如果表單整個(gè)表單是AJAX提交時(shí),就不能按傳統(tǒng)的做法了2013-01-01

