我一直试图找到一种方法为多个事件添加相同的操作.
我将以下操作分配给#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.');
});
});
Run Code Online (Sandbox Code Playgroud)
现在,上面的代码运行良好.当用户从选择菜单中选择一个项目时,触发更改事件并发出ajax请求,并显示图像以及一个提示"Image Loaded"的警告窗口.
但是,如果用户不使用鼠标而是使用键盘keyup/keydown从菜单中进行选择,我希望触发相同的操作.它默认情况下没有这样做,我希望它做但但似乎并非如此,所以我想为keyup或keydown事件分配相同的动作,但我不想写(或复制/粘贴)相同的代码再次.
经过一段时间的搜索我发现了关于bind(),我尝试这样做:
$("#comid").bind('keyup',function(event){
$("#comid").trigger('change');
}
Run Code Online (Sandbox Code Playgroud)
它工作,但当我使用密钥时,我看到警报窗口两次说"图像已加载",所以我发现该行为不需要,因为它似乎是两次请求.
有什么我做错了吗?还是有更好的替代方案,我想要完成的事情?
提前致谢 :)
$("#comid").bind('change keyup', function(){
...
});
Run Code Online (Sandbox Code Playgroud)
您可以将函数附加到这样的多个事件.检查文档中的bind,它非常有用.
您可能还想阅读有关直播的内容.它(几乎)与bind相同,但该函数也将应用于任何新创建的(匹配)元素.
编辑:对于您的选择菜单,如果您使用箭头键选择一个选项,该功能将触发两次.在您的情况下,您应该只使用change().不需要Keyup().