【问题标题】:loading of javascript function only once using .one() API使用 .one() API 仅加载一次 javascript 函数
【发布时间】:2014-12-28 12:47:23
【问题描述】:

我对 JQuery 的 .one() API 有疑问,我试图在使用 .one() API 完全加载文档后仅加载一次某些函数,这似乎不起作用,我可以'不知道为什么……

我能得到一些帮助吗?

$(document).one('load',function(){
// Perform something here...
});

【问题讨论】:

  • 不应该$(window).load(function(){ foo(); bar(); }); 做你需要的吗?您的函数foo(); bar(); 将只运行一次。指望那个!
  • 天哪,这就像一个魅力......这和做类似 $(document).ready(function(){/.../}) 之类的东西有什么区别?他们都达到了同样的目的,对吗?我遇到了一个问题,每次在文档中进行任何 AJAX 调用时,.ready() 中的函数都会执行..
  • 听起来你的 AJAX 不是 AJAX!
  • 非常感谢,不胜感激。

标签: jquery api


【解决方案1】:

这工作使用而不是“加载”来“准备”不确定为什么它不能与负载一起工作

$(document).one('ready',function(){
    // Perform something here...
    alert("ther you go");
});

请记住,“ready”在“load”之前触发。

【讨论】:

  • 这已被 jQuery 3.0 弃用; one() 将不再适用于“就绪”事件。
  • @Daniel 那么它将被什么取代?
【解决方案2】:

document readywindow load 的任何组合中使用.one() 毫无意义。

api.jquery.com/one:

将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序

您显然不希望readyload 触发两次。它们每个会话运行一次,因此将.one() 用于此(人工)事件非常愚蠢。

也很高兴知道:

$(document).one("ready", function(){
  console.log("DOCUMENT SILLY ONE READY");
});

$(function(){ // (DOM ready shorthand)
  console.log("DOCUMENT READY");  // not only will this one run...
});    
              // but also this is the order result:

                    // DOCUMENT READY
                    // DOCUMENT SILLY ONE READY

总之,你只需要

$(function(){
  // DOM is ready to be manipulated
  foo();      
  bar();
});

或:

$(window).load(function(){
  // DOM, metadata, scripts, files, styles, images...etc are load and ready
  foo();      
  bar();        
});

你的函数不会运行超过一次。

【讨论】:

  • 因为ready不会互相覆盖,如果你使用的是AJAX,可能会在多个页面访问时调用同一个函数。
猜你喜欢
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多