javascript jQuery绑定事件序列

brccelvz  于 2022-11-27  发布在  Java
关注(0)|答案(2)|浏览(179)

编辑:问题是我使用了.select()而不是.find();

我有一个简单的jQuery代码(jsfiddle:(第10页)

<div class = "someclass"><button class = "myclass">clickme</button></div>
<script>
$(document).ready(function() {
    $('.someclass').select('.myclass').bind('click', function() { console.log('red'); });    
    $('.myclass').bind('click', function() { console.log('green'); });
});
</script>

究竟为什么“绿色”总是打印在“红色”之前?(我该如何改变这一点,使“红色”出现在“绿色”之前?)

aiqt4smr

aiqt4smr1#

正如所写的,您的.select()调用是一个no-op -injQuery,它用于注册onselect事件的处理程序!
由于.select()是一个链接函数,它返回调用它的原始对象,因此结果是您已经将第一个click处理程序绑定到外部.someclass div。
因此,您看到的是 * 冒泡 * 的效果,单击首先点击按钮(“绿色”),然后冒泡到其父按钮(“红色”),按此顺序。
如果您调用.select()的目的是将第一个单击处理函数仅绑定到按钮,则应该使用.children('.myclass')

f5emj3cl

f5emj3cl2#

您可以绑定自己自定义函数:

$('.myclass').click(function(){ 
      $(this).trigger('green');
      $(this).trigger('red');
   })

$('.myclass').bind('green', function(e) {
   console.log('green');
});

...

但是,不建议使用bind,而建议使用.on()-〉http://api.jquery.com/on/

相关问题