jQuery自定義事件之triggerHandler事件
trigger事件還有一個(gè)特性:會(huì)在DOM樹(shù)上冒泡,所以如果要阻止冒泡就需要在事件處理程序中返回false或調(diào)用事件對(duì)象中的.stopPropagation() 方法可以使事件停止冒泡
trigger事件是具有觸發(fā)原生與自定義能力的,但是存在一個(gè)不可避免的問(wèn)題: 事件對(duì)象event無(wú)法完美的實(shí)現(xiàn),畢竟一個(gè)是瀏覽器給的,一個(gè)是自己模擬的。盡管 .trigger() 模擬事件對(duì)象,但是它并沒(méi)有完美的復(fù)制自然發(fā)生的事件,若要觸發(fā)通過(guò) jQuery 綁定的事件處理函數(shù),而不觸發(fā)原生的事件,使用.triggerHandler() 來(lái)代替
triggerHandler與trigger的用法是一樣的,重點(diǎn)看不同之處:
- triggerHandler不會(huì)觸發(fā)瀏覽器的默認(rèn)行為,.triggerHandler( "submit" )將不會(huì)調(diào)用表單上的.submit()
- .trigger() 會(huì)影響所有與 jQuery 對(duì)象相匹配的元素,而 .triggerHandler() 僅影響第一個(gè)匹配到的元素
- 使用 .triggerHandler() 觸發(fā)的事件,并不會(huì)在 DOM 樹(shù)中向上冒泡。 如果它們不是由目標(biāo)元素直接觸發(fā)的,那么它就不會(huì)進(jìn)行任何處理
- 與普通的方法返回 jQuery 對(duì)象(這樣就能夠使用鏈?zhǔn)接梅?相反,.triggerHandler() 返回最后一個(gè)處理的事件的返回值。如果沒(méi)有觸發(fā)任何事件,會(huì)返回 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ā)瀏覽器默認(rèn)聚焦行為</button><br><br>
<button>不會(huì)冒泡,不觸發(fā)瀏覽器默認(rèn)聚焦行為</button>
</div>
<script type="text/javascript">
//給input綁定一個(gè)聚焦事件
$("input").on("focus",function(event,title) {
$(this).val(title)
});
$("#accident").on("click",function() {
alert("trigger觸發(fā)的事件會(huì)在 DOM 樹(shù)中向上冒泡");
});
//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","沒(méi)有觸發(fā)默認(rèn)聚焦事件");
});
</script>
</body>
</html>
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求