有时候我们需要模仿用户的操作,来达到比如说单击的效果,在JQuery中提供了tirgger()方法和tirggerHandler方法来完成模拟操作
比如使用以下的代码来触发id为btn的button的click事件:
$('#btn').trigger("click");
这样,当页面载入完成后。就会立马输出想要的效果。也能够直接简写click()。来达到相同的效果
但是如果对象变为其他没有绑定click事件的元素,则此操作无效,例如:
$('#text').trigger("click");
使用了trigger和triggerHandler方法,我们相当于自己手动帮用户执行了点击等操作
那么trigger方法和triggerHandler方法究竟有什么区别呢?
二者的区别在于trigger()会触发事件的冒泡,而tirggerHandler()不会触发事件冒泡 并且 trigger() 会影响所有与 jQuery 对象相匹配的元素,而 triggerHandler() 仅影响第一个匹配到的元素
我们这里探究事件冒泡问题
观察以下代码
<body>
<h2>自定义事件triggerHandler</h2>
<div class="left">
<div id="accident">
<a>triggerHandler事件</a>
<input type="text">
</div>
<button>事件冒泡,触发浏览器默认聚焦行为</button><br><br>
<button>不会冒泡,不触发浏览器默认聚焦行为</button>
</div>
<script type="text/javascript">
//给input绑定一个聚焦事件
$("input").on("focus",function(event,title) { //focus
$(this).val(title)
});
$("#accident").on("click",function() { //click
alert("trigger触发的事件会在 DOM 树中向上冒泡");
});
//trigger触发focus
$("button:first").click(function() {
$("a").trigger("click");
$("input").trigger("focus","2222");
});
//triggerHandler触发focus
$("button:last").click(function() {
$("a").triggerHandler("click");
$("input").triggerHandler("focus","没有触发默认聚焦事件");
});
</script>
</body>
当点击第一个按钮时,因为$(“a”)没有绑定click事件,所以执行完此语句后没有反应,但是由于使用的是trigger()方法,会向上冒泡,所以id为accident的div块会执行他的绑定事件。于是alert("trigger触发的事件会在 DOM 树中向上冒泡");
语句会被执行。
当点击第二个按钮时,$(“a”)没有绑定click事件,所以执行完此语句后也没有反应,但是由于使用的是triggerHandler()方法,所以不会冒泡,就此结束。