jQuery - 为多个事件添加相同的操作&捆绑

时间:2011-04-13 21:40:33

标签: 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_photo&comid=' + comid, function() {
        $('#com_photo').removeClass('loading');
        $('#com_photo img').hide();
        $('#com_photo img').fadeIn(1000);
        alert('Image Loaded.');
    });
});

现在,上面的代码效果很好。当用户从选择菜单中选择一个项目时,触发更改事件并发出ajax请求,并显示图像以及一个提示“图像已加载”的警告窗口。

但是,如果用户不使用鼠标而是使用键盘keyup / keydown从菜单中进行选择,我希望触发相同的操作。它默认情况下没有这样做,我希望它做但但似乎并非如此,所以我想为keyup或keydown事件分配相同的动作,但我不想写(或复制/粘贴)相同的代码再一次。

经过一段时间的搜索,我发现了关于bind(),我尝试这样做:

$("#comid").bind('keyup',function(event){
    $("#comid").trigger('change');
}

它可以工作,但是当我使用密钥时,我看到警报窗口两次说“Image Loaded”,所以我发现这种行为不受欢迎,因为它好像是在两次提出请求。

我有什么问题吗?还是有更好的替代方案,我想要完成的任务?

提前致谢:)

2 个答案:

答案 0 :(得分:8)

$("#comid").bind('change keyup', function(){
    ...
});

您可以将您的功能附加到这样的多个事件。查看bind的文档,它非常有用。

您可能还想了解live。它(几乎)与bind相同,但该函数也将应用于任何新创建的(匹配)元素。

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

。不需要Keyup()

答案 1 :(得分:2)

您可以使用live()绑定多个事件:

$("#comid").live({
  click: function(){/* code */},
  change: function(){/* code */}
});

然后,您可以将脚本包装到函数中,并在所有事件中调用该函数。

jQuery API的更多信息。