如何使用on()/of()激活每个事件一次
How to activate each event once using on()/off()?
要求:
-
单击同一单选按钮不应多次触发事件。
-
我们可以在单选按钮之间移动很多次。
$(function(){
function teacher(){
$(this).off('click');
console.log('teacher off');
}
function student(){
$(this).off('click');
console.log('student off');
}
$('#teacher').on('click', teacher);
$('#teacher').click(function(){
$('#student').on('click', student);
console.log('student on');
});
$('#student').on('click', student);
$('#student').click(function(){
$('#teacher').on('click', teacher);
console.log('teacher on');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="radio" id="student" name="school" value="student" checked>Student
<input type="radio" id="teacher" name="school" value="teacher">Teacher
此代码中的控制台日志没有给我以下模式:
老师不在,学生在
学生休息,老师在
请参阅标题中的问题。
处理此问题的一种更优雅的方法是使用带有事件委派的change
事件。这样,我们就不必不断地将事件侦听器解除绑定和重新绑定到各个单选按钮。
$(document).on('change', '[name="school"]', function() {
var selected = $(this).val();
console.log('Do something with: ', selected);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="radio" id="student" name="school" value="student" checked>Student
<input type="radio" id="teacher" name="school" value="teacher">Teacher
如果只想触发一次事件,则需要使用.one()
:
$('#student').one('click', student);
jQuery.one():
将处理程序附加到元素的事件每个元素每个事件类型最多执行一次处理程序
相关文章:
- 主干模型更改事件只触发一次
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- 在单击事件中,第一次单击时激发代码一次,其余代码在所有单击时运行
- 简单的onclick事件只起过一次作用
- 一次点击,两次'单击'事件已启动
- Javascript事件发射器一次处理多个事件
- jQuery单击事件在一次之后不会触发
- 事件虽然注册了一次,但会触发多次
- 将触摸事件转换为鼠标事件仅每秒有效一次
- 火灾事件最多每x秒发生一次
- jQuery事件将只运行一次
- Jquery事件只工作一次
- 如何使用on()/of()激活每个事件一次
- 淘汰赛仅更新事件一次
- 元素出现后调用单击事件一次
- 带有 JSON 数据的 JavaScript Kendo 调度程序仅移动事件一次
- AngularJS-只对ng更改触发$timeout事件一次
- .一个事件一次又一次地被解雇
- 火灾调整事件一次不基于时间
- jQuery点击事件一次点击触发多次