Javascript 如果指定了回调函数,则从内部删除事件侦听器
我有一种情况,我想将带有参数的函数附加到事件侦听器,如下所示:Javascript 如果指定了回调函数,则从内部删除事件侦听器,javascript,Javascript,我有一种情况,我想将带有参数的函数附加到事件侦听器,如下所示: 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)
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);
});
我想在调用函数后立即删除侦听器?我怎样才能做到这一点
谢谢。您只能删除与添加的功能完全相同的功能 在你的情况下,你可以这样做
// 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
您只能删除与添加的函数完全相同的函数 在你的情况下,你可以这样做
// 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
只需使用命名函数
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);
}
它将删除事件
timeupdate
的句柄onTimUpdate
,只需使用命名函数即可
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);
}
它将删除事件
timeupdate
的句柄onTimUpdate
,您必须传递。removeEventListener()
对传递给的相同函数的引用。对现有代码进行最小更改的一种方法是命名(当前为匿名)函数表达式,然后将该函数传递给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(音频,18,null)
(如果希望能够从代码的其他部分调用pauseAudioAt()
,并删除侦听器,则可以将其与中所示的函数声明相结合。)必须向.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(音频,18,null)
(如果您希望能够从代码的其他部分调用pauseAudioAt()
,并删除侦听器,则可以将其与函数声明结合起来,如中所示。)谢谢!救了我一天!谢谢救了我一天!