我一直在努力寻找为多个事件添加相同操作的方法。
我将以下操作分配给#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”,所以我发现这种行为不受欢迎,因为它好像是在两次提出请求。
我有什么问题吗?还是有更好的替代方案,我想要完成的任务?
提前致谢:)
答案 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的更多信息。