我有一种情况,我希望将带参数的函数附加到事件监听器,如下所示:
var pauseAudioAt = function(aud, seconds, removeListener) {
console.log(aud.currentTime);
// check whether we have passed 5 minutes,
// current time is given in seconds
if(aud.currentTime >= seconds) {
// pause the playback
aud.pause();
if (removeListener) {
aud.removeEventListener('timeupdate', pauseAudioAt);
showBtn();
}
}
}
audio.addEventListener("timeupdate", function() {
pauseAudioAt(audio, 18, true);
});
我想在调用函数后立即删除侦听器?我怎样才能做到这一点?
感谢。
答案 0 :(得分:2)
您必须将.removeEventListener()
引用传递给传递给.addEventListener()
的相同函数。对现有代码进行最小更改的一种方法是命名您的(当前是匿名的)函数表达式,然后将该函数传递给pauseAudioAt()
,而不是传递布尔值:
var pauseAudioAt = function(aud, seconds, listenerToRemove) {
console.log(aud.currentTime);
// check whether we have passed 5 minutes,
// current time is given in seconds
if(aud.currentTime >= seconds) {
// pause the playback
aud.pause();
if (typeof listenerToRemove === "function") {
aud.removeEventListener('timeupdate', listenerToRemove);
showBtn();
}
}
}
audio.addEventListener("timeupdate", function listener1() {
pauseAudioAt(audio, 18, listener1);
});
这样,pauseAudioAt()
不需要对需要删除哪个函数的硬编码引用。
如果您想在不使用删除侦听器的情况下调用pauseAudioAt()
,则只需省略该参数:pauseAudioAt(audio, 18)
-
如果方便的话,可以通过false
或null
或其他内容:pauseAudioAt(audio, 18, null)
。
(如果您希望能够从代码的其他部分调用pauseAudioAt()
和删除侦听器,那么您可以将其与函数声明相结合,如{{3 }}。)
答案 1 :(得分:0)
您只能删除与之相同的功能
在你的情况下,你可以做
// added this
var x = function() {
pauseAudioAt(audio, 18, true);
}
//
var pauseAudioAt = function(aud, seconds, removeListener) {
console.log(aud.currentTime);
// check whether we have passed 5 minutes,
// current time is given in seconds
if(aud.currentTime >= seconds) {
// pause the playback
aud.pause();
if (removeListener) {
aud.removeEventListener('timeupdate', x); // changed this
showBtn();
}
}
}
audio.addEventListener("timeupdate", x); // changed this
答案 2 :(得分:0)
只需使用命名功能。
psql -qAtX -F '^' -c 'TABLE dummy_table' | cut -d '^' -f 1-2,4
它会删除事件var pauseAudioAt = function(aud, seconds, removeListener) {
console.log(aud.currentTime);
// check whether we have passed 5 minutes,
// current time is given in seconds
if(aud.currentTime >= seconds) {
// pause the playback
aud.pause();
if (removeListener) {
aud.removeEventListener('timeupdate', onTimeUpdate);
showBtn();
}
}
}
audio.addEventListener("timeupdate", onTimeUpdate);
function onTimeUpdate() {
pauseAudioAt(audio, 18, true);
}
的句柄onTimUpdate
。