jquery绑定事件序列

时间:2012-02-24 12:16:38

标签: javascript jquery javascript-events

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

我有这个简单的jquery代码(jsfiddle:http://jsfiddle.net/periklis/znstj/

<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>

为什么“绿色”总是在“红色”之前打印? (以及如何更改此项以使“红色”出现在“绿色”之前?)

一如既往,先谢谢大家!

2 个答案:

答案 0 :(得分:2)

正如所写,你的.select()调用是一个无操作 - 在jQuery中它用于注册onselect事件的处理程序!

由于.select()是一个链接函数,它返回调用它的原始对象,结果是您将第一个click处理程序绑定到外部.someclass div。

你所看到的是 bubbling 的影响,点击首先按下按钮(“绿色”),然后按顺序冒泡到其父级(“红色”)

如果.select()调用的意图是将第一个点击处理程序绑定到按钮,那么您应该使用.children('.myclass')代替。

答案 1 :(得分:0)

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

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

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

...

但是,bind已被弃用,而有利于.on() - &gt; http://api.jquery.com/on/