无法取消绑定事件监听器 - turbolinks缓存出现问题

jas*_*328 2 javascript jquery event-listener turbolinks

我绑定然后将ready事件侦听器解绑定到文档.

$(document).bind("ready", readyEventHandler);

function readyEventHandler() {
  // run some code

  $(document).unbind("ready");
}
Run Code Online (Sandbox Code Playgroud)

代码不会产生任何错误,并且会起作用.但是,我的javascript被缓存并复制了代码,所以如果我回去然后在浏览器中转发页面,我最终会运行这个代码不止一次.发生这种情况时,根本不会调用ready事件侦听器.我是否正确解除了此事件监听器的绑定?我知道缓存问题变得有问题(这是它自己的独立问题)但我只是想绑定ready事件监听器,让它运行代码,然后取消绑定它.

Dek*_*kel 5

不太确定它会有所帮助,但这是我的2美分 - 而不是试图解除绑定readyEventHandler- 确保如果你运行该功能一旦它不会运行两次:

var readyHandlerRun = false;

$(document).bind("ready", readyEventHandler);

function readyEventHandler() {
    if (readyHandlerRun) {
        return;
    }
    readyHandlerRun = true;
    // Rest of your code...
}
Run Code Online (Sandbox Code Playgroud)

刚刚出现的另一个选项:

$(document).bind("ready", readyEventHandler);
function readyEventHandler() {
  readyEventHandler = function() { }  
  
  console.log('ready');
  // Rest of your code...
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

更新(@ jason328)

与Dekel交谈后,他给了我适当的答案.

$(document).bind("ready", function() {
    readyEventHandler();
    readyEventHandler = function() { }
});
Run Code Online (Sandbox Code Playgroud)

优雅,工作就像一个魅力!