无法取消绑定事件侦听器 - 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
});