根据事件有条件地阻止事件删除
Conditionally prevent event removal depending on the event
我有一个有趣的情况。我有多个单击事件附加到一个元素。
在事件1之后,我需要删除事件2,但保留事件1。
这是我所拥有的:
$('.square').on('click', grow);
$('.square').on('click', nameReset);
var nameReset = function () {
alert(this.className);
}
var grow = function () {
$(this).toggleClass('grow');
$(this).off('click');
}
换句话说,我需要保留grow函数,但在事件触发后删除nameReset。
.square {
height: 100px;
width: 100px;
border: 1px solid;
display :inline-block;
transition: all 2s;
}
.grow {
width: 150px;
height: 150px;
}
.red { background-color: red; }
.blue { background-color: blue; }
两个选项:
-
删除事件时指定函数(即
$(this).off('click', nameReset)
)。此处示例
jQuery
.off()
可以通过在处理程序参数中指定函数名来删除处理程序。当jQuery附加一个事件处理程序时,它会为处理程序函数分配一个唯一的id。
var nameReset = function () { alert(this.className); } var grow = function () { $(this).toggleClass('grow'); $(this).off('click', nameReset); } $('.square').on('click', grow); $('.square').on('click', nameReset);
-
或者,您可以将事件命名为(
$(this).off('click.square.nameReset')
),以便删除所需的事件:此处示例
var nameReset = function () { alert(this.className); } var grow = function () { $(this).toggleClass('grow'); $(this).off('click.square.nameReset'); } $('.square').on('click.square.grow', grow); $('.square').on('click.square.nameReset', nameReset);
相关文章:
- 兰吉 |如何在 span 标签上使用单击事件删除突出显示的文本
- javascript删除事件侦听器
- 从dom中删除任何元素后,Touchmove事件停止触发
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 使用jQuery删除动态创建的元素上的mouseenter事件
- IE9-添加和删除DOM元素会破坏父keydown事件
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- 选择选项是添加或删除事件
- 删除在特定事件上设置的样式
- jQuery使用.of()删除事件处理程序时出现的问题
- 可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
- 如何删除可拖动组中某个元素上的拖动事件
- 删除Google Calander API中的事件
- fullcalendar后台事件:允许删除
- 删除所有按下的按键事件
- 分配和删除单击事件
- jquery on事件删除除span之外的所有标记
- 根据事件有条件地阻止事件删除
- HTML - 粘贴事件删除多余的空格
- 事件删除搜索下拉列表