jQuery中事件处理程序的顺序

3
我正在动态绑定事件到一个文本元素上。这是我的代码:
<input type="text" id="myTxt" />

<script type="text/javascript">
    function attachEvent1(element){
        element.keyup(function(){
            console.log("Event:"+event.keyCode);
        });
    }
    function attachEvent2(element){
        element.keyup(function(){
            console.log("Value:"+this.value);
        });
    }   
    attachEvent1($('#myTxt'));
    attachEvent2($('#myTxt'));      
</script>

我需要的是,我希望第二个事件处理程序(由attachEvent2绑定)先被调用,即使它是在attachEvent1之后绑定的。在jQuery中是否可行?

不,这需要深入挖掘jQuery._data对象的扩展属性,其中存储了事件处理程序并重新排序函数。 - jAndy
2
jQuery有意保证事件处理程序按绑定顺序调用。您可以绑定一个代理函数,该函数知道调用其他函数的顺序。 - nnnnnn
@Anurag. 谢谢。你能把你的评论移到答案部分吗,这样我就可以接受为答案了。 - Akhil Sekharan
这里没有重复回答的意义。我会将这个问题标记为重复,因为它们涵盖了完全相同的内容。 - Anurag
我是说在答案中只需指出链接。 - Akhil Sekharan
显示剩余2条评论
1个回答

0

这样怎么样:

function handler1()
{
  console.log("Event:"+event.keyCode);
}

function handler2()
{
  console.log("Value:"+this.value);
}

function attachEvent1(element)
{
  element.keyup(handler1);
}

function attachEvent2(element)
{
  element.unbind('keyup', handler1);
  element.keyup(handler2);
  element.bind('keyup', handler1);
}   

attachEvent1($('#myTxt'));
attachEvent2($('#myTxt'));

如果你想要更高级的东西,你可以保留处理程序列表,并在循环中进行重新绑定等操作,但是重新绑定事件的基本思路具有期望的效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接