好的,我刚刚要求解除特定的按键事件。我现在用命名空间事件解决了这个问题。但是我遇到了另一个问题......下面的函数在animate()
显示div之后绑定了一个按键事件。它工作得很好,但是按键事件似乎计算时间,函数执行...在我的情况下,myFnc()
在点击链接时执行...所以当我点击链接时keypress.f
事件被触发一次......但是当我按下键之前多次点击链接时,按键事件也执行了一次以上虽然我只按了一次键....所以fadeToggle()一次按键执行5次,当功能执行5次之前通过5次点击...有没有人理解我的意思,可以帮助我吗?
function myFnc() {
$('#somediv').animate({
height: 'toggle'
}, 600, function() {
$(document).bind('keypress.f', function(event) {
if($('#secret').is(':visible')) {
if ( event.which == 102 ) {
$('.content-2').fadeToggle();
$('.content-284').fadeToggle();
}
}
else {
$(document).unbind('keypress.f');
}
});
});
}
答案 0 :(得分:0)
使用.is()
method和:animated
selector仅在当前未进行动画时应用动画..(如果在动画进行过程中多次点击该问题 )
function myFnc() {
var $somediv = $('#somediv');
if (!$somediv.is(':animated')) {
$somediv.animate({
height: 'toggle'
}, 600, function() {
$(document).bind('keypress.f', function(event) {
if ($('#secret').is(':visible')) {
if (event.which == 102) {
$('.content-2').fadeToggle();
$('.content-284').fadeToggle();
}
}
else {
$(document).unbind('keypress.f');
}
});
});
}
}
另一个解决方案是在绑定新的按键之前始终取消绑定按键。
$(document).unbind('keypress.f');
$(document).bind('keypress.f', function(event) {...});
这种情况总是只有一个......
答案 1 :(得分:0)
你可以用
之类的东西来解决这个问题var bound_keypress_f = false;
function myFnc() {
$('#somediv').animate({
height: 'toggle'
}, 600, function() {
if (!bound_keypress_f) {
$(document).bind('keypress.f', function(event) {
if($('#secret').is(':visible')) {
if ( event.which == 102 ) {
$('.content-2').fadeToggle();
$('.content-284').fadeToggle();
}
bound_keypress_f = true;
}
else {
$(document).unbind('keypress.f');
bound_keypress_f = false;
}
});
}
});
}
答案 2 :(得分:0)
您正在绑定5个keypress.f事件(每次单击链接时绑定一个事件)。您可以通过几种不同的方式解决这个问题:
1)在绑定keypress.f事件之前取消绑定所有keypress.f事件。
2)在页面加载时绑定keypress.f事件,并在函数的开头添加if(标志)。只要单击链接,将标志设置为true。如果您不希望keypress.f触发该函数,请将该标志设置为false。