今天在看jQuery基础教程时看到了jQuery中的事件命名空间,在js中我没有看到过类似的定义,于是去搜索了一下相关的内容,以下为自己的理解,不当之处还望指出。
所谓事件命名空间,简单来说就是事件类型后面用点语法附加一个别名,以便引用事件,比如:’on(‘click.demo’,function(){})’,其中demo就相当于一个事件命名空间,我们可以给相同的事件添加不同的事件命名空间,比如
$('.hello').on('click.hello1',function(){alert('hello1')});
$('.hello').on('click.hello2',function(){alert('hello2')});
以上代码意思是为类名是’.hello’的jQuery对象添加两个名字分别为hello1,hello2的点击事件,两个事件按照定义的顺序依次执行。
很多时候,我们需要移出一个对象上的部分事件,这时事件命名空间就体现了他的强大之处,例子:
$('.welcome').click(function(){
$('.hello').off('click.hello1');
});
当点击了类名为welcome的元素后,调用移除事件函数off(),此时若再点击类名为‘hello’的元素,就只会弹出hello2的对话框,hello1 的对话框将不会弹出,因为名为hello1的点击事件已经被移出。
也可以用在批量删除绑定了相同事件名的事件,比如
$('.hello').on('clcik.demo',show);
$('.hello').on('mouseover.demo',show1);
$('.hello').on('click.demo1'.show2);
$('.hello').on('click',function(){alert('hello111111')});
$('.welcome').click(function(){
$('.hello').off('.demo');
});
以上代码表示删除类名为.hello的元素上所有名为demo的事件,其他事件不受影响。
再比如
$('.hello').on('clcik.demo',show);
$('.hello').on('mouseover.demo',show1);
$('.hello').on('click.demo1'.show2);
$('.hello').on('clcik.demo',show3);
$('.hello').on('click',function(){alert('hello111111')});
$('.welcome').click(function(){
$('.hello').off('click.demo');
});
此时会删除所有绑定在类名为.hello的元素上名字为demo的点击事件(必须同时满足),其他名字或者其他类型的事件均不受影响。
另外,事件命名空间只能用在on()函数,off()函数或bind(),unbind()中,不能用在事件简单绑定函数中。