jQuery:如何在两个不同的事件上绑定相同的操作?

时间:2011-05-10 21:51:12

标签: jquery

我发现自己编写的代码看起来像这样:

$(document).ready(function(){

    updateStuff();

    $('select').change(function(){
        updateStuff();
    });
});

function updateStuff(){
    //do something simple
}

同一个函数updateStuff()被调用两次(每个事件一次),但两个事件之间没有任何区别。我想知道是否有更好的方法来编写这个,以便在两个事件上调用相同的代码,我可以更多地干掉我的代码。这样,我不需要首先创建这个功能。

也许是这样的(如果存在这样的语法)?

$('select').bind(['document.ready', 'change'], function(){
    //do something simple
});

2 个答案:

答案 0 :(得分:2)

您需要在ready处理程序中包含change事件绑定,以便在执行绑定时保证DOM可以进行操作。你这几乎是我能想到的最简单的方式。我会改变你的代码来绑定你的更改事件,如下所示:

$('select').change(updateStuff);

除非您需要传递参数,否则无需在匿名函数中将您的调用包装到updateStuff()

正如jAndy指出的那样,你也可以通过使用jQuery手动调用事件的处理程序来调用你绑定为事件处理程序的函数,如下所示:

$('select').change(updateStuff).change();

您也可以使用简写就绪绑定,因此您的代码将简化为:

$(function(){
    $('select').change(updateStuff).change();
});

function updateStuff(){
    //do something simple
}

但是,如果你想同时绑定到其他事件(除了就绪),你可以这样做:

$('select').bind('change click', updateStuff);

查看documentation for .bind() here

答案 1 :(得分:1)

$(document).ready(function() {
    $('select').change(function(){
        updateStuff();
    }).change();
});

..可能是实现这一目标的最便捷方式。就像是,“将更改事件绑定到该节点,然后至少调用该事件处理程序一次”。

甚至更短:

$(document).ready(function() {
    $('select').change( updateStuff ).change();
});