对不同元素上的不同事件使用相同函数的jQuery.one()
jQuery .one() with same function for different events on different elements
我的页面上有一个介绍,当按下一个键或点击某个元素时,该介绍将消失。我将对这两个事件使用相同的功能,但由于页面经过了大量修改,无论以何种方式触发,该事件都将只触发一次。
我的功能:
function start() {
$('.intro').remove();
$('.something-else').show();
}
如何绑定事件:
$('body').keypress(start);
$('.intro').click(start);
如果事件是一样的,我可以说
$('body, .intro').one('click', start);
如果这两个事件都发生在同一个元素上,我可以说:
$('.intro').one('click keypress', start);
如何将两者结合起来:具有不同的元素和不同的事件,并且函数只能调用一次?
最简单的解决方案是存储函数是否被调用。
var started = false;
function start() {
if(started) return;
$('.intro').remove();
$('.something-else').show();
started = true;
}
然后,您的函数只能被调用一次,每隔一次调用都将被忽略。
我不认为这个解决方案是一个明确的方法,而是使用.one()
和.trigger()
的组合来完成的。因为您对其中一个绑定项调用了$(".intro").remove()
,所以事件处理程序是隐式解除绑定的。样品Fiddle
除去fiddle中看到的html,这就是代码。
// Your event handler
function start() {
$("#intro").remove();
$("#main").show();
console.log("start handler called");
}
// Handle the keypress event
$("body").one( "keypress", start );
// Allow user to click through the intro, but trigger the keypress handler on the body which is a one-time event handler)
$("#intro").one( "click", function () { $("body").trigger( "keypress" ); });
使用两行代码即可完成;)
$('body').one('keypress', start);
$('.intro').one('click', start);
编辑:您应该手动解除另一个回调的绑定,以免它稍后意外运行。
相关文章:
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 如何从jquery函数返回变量
- 如何将具有文本类型值的var放入jQuery函数中
- Jquery函数在错误的时间提交
- 锚链接无法使用.slideUp jquery函数
- 重新分解jQuery函数
- 如何在视图模型contet更新更新上调用Jquery函数
- 如何向这个javascript/jquery函数添加参数
- 添加类来触发jquery函数
- 更改智能表中的页面将停止JQuery函数的工作
- 使用每500ms运行一次的jquery函数是个好主意吗
- jQuery函数不能只在一个页面上工作
- 如何将jquery函数链接到vanilla选择器
- 仅在小型设备上调用jQuery函数
- 如何将jquery函数仅应用于大屏幕
- 奇怪的jquery函数行为
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 在jquery函数内部设置来自jquery函数的var;t运行
- 从Jquery函数中获取一个变量