jQuery.one()在第页上仅运行一次

jQuery.one()在第页上仅运行一次,jquery,Jquery,如果用户按住键,我将在keydown上使用.one()函数来停止此函数中的函数持续运行 问题是,.one()函数只运行一次,只有在刷新页面时才能再次运行 $(document).one('keydown',function(e){ if (e.keyCode == 37) { prev(); return false; } }); 有没有办法绕过这个问题,或者有其他方法 我明白了。one()表示一次,这就是函数的要点。我正试图让它在每次按键下只

如果用户按住键,我将在keydown上使用.one()函数来停止此函数中的函数持续运行

问题是,.one()函数只运行一次,只有在刷新页面时才能再次运行

$(document).one('keydown',function(e){
    if (e.keyCode == 37) { 
        prev();
        return false;
    }
});
有没有办法绕过这个问题,或者有其他方法

我明白了。one()表示一次,这就是函数的要点。我正试图让它在每次按键下只运行一次。

简单破解:

var pressed = false;
$(document).on('keydown',function(e){
    if (e.keyCode == 37 && !pressed) { 
        pressed = true;
        prev();
        return false;
    }
});
然后您只需要确保您的set
pressed=falseprev()
函数(可能在
pev()
函数的末尾…),请再次执行code>。这也可能发生在键盘上
onkeyup:

$(document).on('keyup',function(e){
    pressed = false;
});
这完全取决于您的需要。

简单黑客:

var pressed = false;
$(document).on('keydown',function(e){
    if (e.keyCode == 37 && !pressed) { 
        pressed = true;
        prev();
        return false;
    }
});
然后您只需要确保您的set
pressed=falseprev()
函数(可能在
pev()
函数的末尾…),请再次执行code>。这也可能发生在键盘上
onkeyup:

$(document).on('keyup',function(e){
    pressed = false;
});
这完全取决于您的需要。

简单黑客:

var pressed = false;
$(document).on('keydown',function(e){
    if (e.keyCode == 37 && !pressed) { 
        pressed = true;
        prev();
        return false;
    }
});
然后您只需要确保您的set
pressed=falseprev()
函数(可能在
pev()
函数的末尾…),请再次执行code>。这也可能发生在键盘上
onkeyup:

$(document).on('keyup',function(e){
    pressed = false;
});
这完全取决于您的需要。

简单黑客:

var pressed = false;
$(document).on('keydown',function(e){
    if (e.keyCode == 37 && !pressed) { 
        pressed = true;
        prev();
        return false;
    }
});
然后您只需要确保您的set
pressed=falseprev()
函数(可能在
pev()
函数的末尾…),请再次执行code>。这也可能发生在键盘上
onkeyup:

$(document).on('keyup',function(e){
    pressed = false;
});

它实际上取决于您的需要。

您可以使用事件的
时间戳
属性,并与之前的值进行比较,如果时间差太短,则
返回false
——重复键。但是,您确实需要使用
.on()

var t=Date.now();
$(文档).on('keydown',函数(e){
如果(例如时间戳-t<100){
t=e.时间戳;
$('pre.out').append((e.timeStamp-t)+':Bad\n');
返回false;
}
t=e.时间戳;
如果(e.keyCode==37){
$('pre.out').append('Bad\n');
返回false;
}
$('pre.out').append('Good\n');
});

您可以使用事件的
timeStamp
属性,并与之前的值进行比较,如果时差太短,则
返回false
——重复键。但是,您确实需要使用
.on()

var t=Date.now();
$(文档).on('keydown',函数(e){
如果(例如时间戳-t<100){
t=e.时间戳;
$('pre.out').append((e.timeStamp-t)+':Bad\n');
返回false;
}
t=e.时间戳;
如果(e.keyCode==37){
$('pre.out').append('Bad\n');
返回false;
}
$('pre.out').append('Good\n');
});

您可以使用事件的
timeStamp
属性,并与之前的值进行比较,如果时差太短,则
返回false
——重复键。但是,您确实需要使用
.on()

var t=Date.now();
$(文档).on('keydown',函数(e){
如果(例如时间戳-t<100){
t=e.时间戳;
$('pre.out').append((e.timeStamp-t)+':Bad\n');
返回false;
}
t=e.时间戳;
如果(e.keyCode==37){
$('pre.out').append('Bad\n');
返回false;
}
$('pre.out').append('Good\n');
});

您可以使用事件的
timeStamp
属性,并与之前的值进行比较,如果时差太短,则
返回false
——重复键。但是,您确实需要使用
.on()

var t=Date.now();
$(文档).on('keydown',函数(e){
如果(例如时间戳-t<100){
t=e.时间戳;
$('pre.out').append((e.timeStamp-t)+':Bad\n');
返回false;
}
t=e.时间戳;
如果(e.keyCode==37){
$('pre.out').append('Bad\n');
返回false;
}
$('pre.out').append('Good\n');
});

一个只做你想做的,它只运行一次!这实际上是防止人们重复提交表单等的一个很好的方法,但需要稍微不同的设计。我自己发现在这里使用命名函数最简单,试试这个

function handle_key_down_event (e) {
    if (e.keyCode == 37) { 
        prev();
        return false;
    }
    document.one('keydown',handle_key_down_event (e));
}
document.one('keydown',handle_key_down_event (e));
通过在函数末尾重新声明,可以再次重置它。要记住的一个小技巧是,如果您正在执行异步(主要是ajax)操作,您可能希望重新绑定调用位于回调的末尾,而不是函数的末尾


编辑:在阅读了您的评论之后,可能最好的重新绑定调用位置是在keyup侦听器中。

一个只做您想做的事情,它只运行一次!这实际上是防止人们重复提交表单等的一个很好的方法,但需要稍微不同的设计。我自己发现在这里使用命名函数最简单,试试这个

function handle_key_down_event (e) {
    if (e.keyCode == 37) { 
        prev();
        return false;
    }
    document.one('keydown',handle_key_down_event (e));
}
document.one('keydown',handle_key_down_event (e));
通过在函数末尾重新声明,可以再次重置它。要记住的一个小技巧是,如果您正在执行异步(主要是ajax)操作,您可能希望重新绑定调用位于回调的末尾,而不是函数的末尾


编辑:在阅读了您的评论之后,可能最好的重新绑定调用位置是在keyup侦听器中。

一个只做您想做的事情,它只运行一次!这实际上是防止人们重复提交表单等的一个很好的方法,但需要稍微不同的设计。我自己发现在这里使用命名函数最简单,试试这个

function handle_key_down_event (e) {
    if (e.keyCode == 37) { 
        prev();
        return false;
    }
    document.one('keydown',handle_key_down_event (e));
}
document.one('keydown',handle_key_down_event (e));
通过在函数末尾重新声明,可以再次重置它。要记住的一个小技巧是,如果您正在执行异步(主要是ajax)操作,您可能需要重新绑定调用