jQuery自定義事件之triggerHandler事件
trigger事件還有一個特性:會在DOM樹上冒泡,所以如果要阻止冒泡就需要在事件處理程序中返回false或調(diào)用事件對象中的.stopPropagation() 方法可以使事件停止冒泡
trigger事件是具有觸發(fā)原生與自定義能力的,但是存在一個不可避免的問題: 事件對象event無法完美的實現(xiàn),畢竟一個是瀏覽器給的,一個是自己模擬的。盡管 .trigger() 模擬事件對象,但是它并沒有完美的復制自然發(fā)生的事件,若要觸發(fā)通過 jQuery 綁定的事件處理函數(shù),而不觸發(fā)原生的事件,使用.triggerHandler() 來代替
triggerHandler與trigger的用法是一樣的,重點看不同之處:
- triggerHandler不會觸發(fā)瀏覽器的默認行為,.triggerHandler( "submit" )將不會調(diào)用表單上的.submit()
- .trigger() 會影響所有與 jQuery 對象相匹配的元素,而 .triggerHandler() 僅影響第一個匹配到的元素
- 使用 .triggerHandler() 觸發(fā)的事件,并不會在 DOM 樹中向上冒泡。 如果它們不是由目標元素直接觸發(fā)的,那么它就不會進行任何處理
- 與普通的方法返回 jQuery 對象(這樣就能夠使用鏈式用法)相反,.triggerHandler() 返回最后一個處理的事件的返回值。如果沒有觸發(fā)任何事件,會返回 undefined
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title></title>
<style>
.left div,
.right div {
width: 500px;
height: 50px;
padding: 5px;
margin: 5px;
float: left;
border: 1px solid #ccc;
}
.left div {
background: #bbffaa;
}
.right div {
background: yellow;
}
</style>
<script src="http://idcbgp.cn/static/lib/jquery/1.9.1/jquery.js"></script>
</head>
<body>
<h2>自定義事件triggerHandler</h2>
<div class="left">
<div id="accident">
<a>triggerHandler事件</a>
<input type="text">
</div>
<button>事件冒泡,觸發(fā)瀏覽器默認聚焦行為</button><br><br>
<button>不會冒泡,不觸發(fā)瀏覽器默認聚焦行為</button>
</div>
<script type="text/javascript">
//給input綁定一個聚焦事件
$("input").on("focus",function(event,title) {
$(this).val(title)
});
$("#accident").on("click",function() {
alert("trigger觸發(fā)的事件會在 DOM 樹中向上冒泡");
});
//trigger觸發(fā)focus
$("button:first").click(function() {
$("a").trigger("click");
$("input").trigger("focus");
});
//triggerHandler觸發(fā)focus
$("button:last").click(function() {
$("a").triggerHandler("click");
$("input").triggerHandler("focus","沒有觸發(fā)默認聚焦事件");
});
</script>
</body>
</html>
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求