jQuery-为多个事件和绑定添加相同的操作

jQuery-为多个事件和绑定添加相同的操作,jquery,binding,Jquery,Binding,我一直在试图找到一种方法,为多个事件添加相同的操作 我为comid分配了以下操作,这是一个选择菜单 $("#comid").change(function() { comid = $("#comid").val(); //alert(comid); $('#com_photo').addClass('loading'); $('#com_photo').load('ajax.php?requestType=ajax&action=get_com_pho

我一直在试图找到一种方法,为多个事件添加相同的操作

我为comid分配了以下操作,这是一个选择菜单

$("#comid").change(function()
{
    comid = $("#comid").val();
    //alert(comid);

    $('#com_photo').addClass('loading');

    $('#com_photo').load('ajax.php?requestType=ajax&action=get_com_photo&comid=' + comid, function() {
        $('#com_photo').removeClass('loading');
        $('#com_photo img').hide();
        $('#com_photo img').fadeIn(1000);
        alert('Image Loaded.');
    });
});
现在,上面的代码运行良好。当用户从选择菜单中选择一个项目时,将触发更改事件并发出ajax请求,图像将显示,同时显示一个警告窗口,提示已加载图像

但是,如果用户不使用鼠标,而是使用键盘keypup/keypdown从菜单中进行选择,我希望触发相同的操作。默认情况下,它不会像我希望的那样执行此操作,但情况似乎并非如此,因此我希望为keyup或keydown事件分配相同的操作,但我不希望再次编写或复制/粘贴相同的代码

经过一段时间的搜索,我发现了绑定,我尝试这样做:

$("#comid").bind('keyup',function(event){
    $("#comid").trigger('change');
}
这是可行的,但当我使用keyup时,我会看到两次警报窗口显示图像已加载,因此我发现这种行为是不必要的,因为它似乎发出了两次请求

我做错什么了吗?或者,除了我正在努力实现的目标,还有其他更好的选择吗

提前感谢:

$("#comid").bind('change keyup', function(){
    ...
});
您可以将函数附加到多个事件,如下面所示。查看文档,它非常有用

您可能还想阅读有关。它的功能与bind几乎相同,但该函数也将应用于任何新创建的匹配元素


编辑:对于您的选择菜单,如果您使用箭头键选择一个选项,该功能将触发两次。在您的情况下,您应该使用change。不需要Keyup。

您可以将多个事件绑定到live:

$("#comid").live({
  click: function(){/* code */},
  change: function(){/* code */}
});
然后,您可以将脚本包装成一个函数,并在所有事件中调用该函数


更多信息,请访问。

当使用键盘进行更改时,更改事件仍应触发。我认为不同的是,它只有在onblur或用户使用键盘更改后单击其他地方时才会启动。对,这就是问题所在。有什么解决办法吗?+1,更简单更好的语法->更容易的解决方案,具体取决于具体情况。是的,我已经学过绑定了。我也尝试过将事件放在一起的方法,但它仍然做同样的事情$body.bind'change keyup',函数{alert'text message';};在我上面的评论中,这只是一个示例代码来显示我所说的行为。哦,我明白你现在的问题了。您应该只使用change函数。没有理由对选择菜单使用keyup。希望有帮助!:是的,我一开始是这样做的,但是当只使用Change event时,select菜单在失去焦点之前不会运行Change event,这就是为什么我一直尝试使用KeyUp或KeyDown事件。但是当我使用KeyUp或KeyDown时,它会发出两次请求。对于选择菜单行为是否有任何解决方法?它在失去焦点之前不会触发更改事件,因为我希望它在菜单中的项目发生更改时立即触发更改事件,这非常适合鼠标单击,而不是键盘上下键。