无法取消绑定事件侦听器 - turbolinks 缓存有问题
Unable to unbind event listener - trouble with turbolinks caching
我将准备好的事件侦听器绑定到文档,然后解除绑定。
$(document).bind("ready", readyEventHandler);
function readyEventHandler() {
// run some code
$(document).unbind("ready");
}
该代码不会产生任何错误并且可以运行。但是,我的 javascript 被缓存并复制了代码,因此如果我返回然后在浏览器中转发页面,我将不止一次地拥有此代码 运行 。发生这种情况时,根本不会调用就绪事件侦听器。我是否正确解除绑定此事件侦听器?我知道缓存问题变得有问题(它自己是单独的问题)但我只想绑定就绪的事件侦听器,拥有它 运行 代码,然后取消绑定它。
不太确定它会有所帮助,但这是我的 2 美分 - 而不是尝试解除绑定 readyEventHandler
- 确保如果你 运行 函数一旦它不会 运行两次:
var readyHandlerRun = false;
$(document).bind("ready", readyEventHandler);
function readyEventHandler() {
if (readyHandlerRun) {
return;
}
readyHandlerRun = true;
// Rest of your code...
}
刚才弹出的另一个选项:
$(document).bind("ready", readyEventHandler);
function readyEventHandler() {
readyEventHandler = function() { }
console.log('ready');
// Rest of your code...
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
更新(来自@jason328)
在与 Dekel 交谈后,他为我提供了适当的答案。
$(document).bind("ready", function() {
readyEventHandler();
readyEventHandler = function() { }
});
优雅迷人!
如果您只想使用一次 eventhamdler,您可以使用 one
而不是 bind
$(document).one("ready", function() {
// code to run on document ready just for once
});
我将准备好的事件侦听器绑定到文档,然后解除绑定。
$(document).bind("ready", readyEventHandler);
function readyEventHandler() {
// run some code
$(document).unbind("ready");
}
该代码不会产生任何错误并且可以运行。但是,我的 javascript 被缓存并复制了代码,因此如果我返回然后在浏览器中转发页面,我将不止一次地拥有此代码 运行 。发生这种情况时,根本不会调用就绪事件侦听器。我是否正确解除绑定此事件侦听器?我知道缓存问题变得有问题(它自己是单独的问题)但我只想绑定就绪的事件侦听器,拥有它 运行 代码,然后取消绑定它。
不太确定它会有所帮助,但这是我的 2 美分 - 而不是尝试解除绑定 readyEventHandler
- 确保如果你 运行 函数一旦它不会 运行两次:
var readyHandlerRun = false;
$(document).bind("ready", readyEventHandler);
function readyEventHandler() {
if (readyHandlerRun) {
return;
}
readyHandlerRun = true;
// Rest of your code...
}
刚才弹出的另一个选项:
$(document).bind("ready", readyEventHandler);
function readyEventHandler() {
readyEventHandler = function() { }
console.log('ready');
// Rest of your code...
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
更新(来自@jason328)
在与 Dekel 交谈后,他为我提供了适当的答案。
$(document).bind("ready", function() {
readyEventHandler();
readyEventHandler = function() { }
});
优雅迷人!
如果您只想使用一次 eventhamdler,您可以使用 one
而不是 bind
$(document).one("ready", function() {
// code to run on document ready just for once
});