jQuery中的.trigger()和.triggerHandler()

.trigger()和.triggerHandler()都是模拟用户行为的方法

triggerHandler()在继承trigger()方法功能的基础上添加了一些功能和限制,两者的用法一致;例如:

//.trigger()
$('div').click(function(){
   alert("trigger");
}).trigger('click');

//.triggerHandler()
$('div').click(function(){
   alert("triggerHandler");
}).triggerHandler('click');

在常规的使用情况下,两者几乎没有区别,都是用于模拟用户行为,也可以传递额外参数。但是在一些特殊情况下,会产生差异:

1. .triggerHandler()方法并不会触发事件的默认行为,而.trigger()会
$('form').trigger('submit');//模拟用户的默认行为,并跳转到执行页面
$('form').triggerHandler('submit');//模拟用户执行提交,并且阻止默认行为

注意:其实上面无论用哪种写法表单都会提交,只是.triggerHadler()会阻止submit的默认行为,不会跳转到执行页面
如果我们想用.trigger()来模拟用户提交,并阻止事件的默认行为,需要这样写:

$('form').submit(function(e){
   e.preventDefault();//阻止事件的默认行为
}).trigger('submit');
2. .triggerHandler()方法只会影响到第一个匹配的元素,而.trigger()会影响到所有元素
<script type="text/javascript">
        $(function(){
          $('button').click(function(){
            alert("haha");
          }).triggerHandler('click');

        })
    </script>
</head>
<body>
    <button></button>
    <button></button>
    <button></button>
</body>

上面代码如果使用.trigger()方法会弹出三个选框,如果使用.trigger()方法只会弹出一个选框

3. .triggerHandler()方法会返回当前事件执行的返回值,如果没有返回值,则返回undefined,而.trigger()方法则返回当前包含事件触发元素的jQuery对象(可以用于连缀)
$('div').click(function(){
   alert('返回jQuery对象');
}).trigger('click').css('background','pink');
//返回触发元素的div jQuery对象,用于给其设置样式
4. .trigger()在创建事件时候,会冒泡,但是这种冒泡是自定义事件才能体现出来,是jQuery扩展于DOM的机制,并非DOM特性,而.triggerHandler()则不会冒泡,例如:
<script type="text/javascript">
        $(function(){
             $('div').bind('myevent',function(){
                alert("自定义事件");
             });
             $('.box3').trigger('myevent');
        })
    </script>
</head>
<body>
    <div class="box1" style="width:100px;height: 100px;background: gold;">
        <div class="box2" style="width:80px;height: 80px;background: skyblue;">
            <div class="box3" style="width:50px;height: 50px;background: pink;">

            </div>
        </div>
    </div>

当使用.trigger()方法模拟用户操作时,当触发了box3的自定义事件,其外层div绑定的同名自定义事件也会被触发,但是使用.triggerHandler()方法不会发生这种情况

命名空间

对于同名同元素绑定的事件移除会存在麻烦,这个时候我们可以使用事件的命名空间解决

<script type="text/javascript">
        $(function(){
            $('div').bind('click.abc click.xyz',function(){
                alert("我是事件1");
            }).bind('mouseout',function(){
                $(this).css('background','pink');
            });
            $('div').unbind('click.abc');
        })
    </script>
</head>
<body>
    <div class="box1" style="width:100px;height: 100px;background: gold;">

    </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值