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

时间:2016-09-22 22:35:33

标签: javascript jquery event-listener turbolinks

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

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

function readyEventHandler() {
  // run some code

  $(document).unbind("ready");
}

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

2 个答案:

答案 0 :(得分:5)

不太确定它会有所帮助,但这是我的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>
&#13;
&#13;
&#13;

更新(来自@ jason328)

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

$(document).bind("ready", function() {
    readyEventHandler();
    readyEventHandler = function() { }
});

优雅,就像魅力一样!

答案 1 :(得分:1)

如果您只想使用一次eventhamdler,则可以使用one代替bind

$(document).one("ready", function() {
   // code to run on document ready just for once
});