【问题标题】:.on load not working.on 负载不工作
【发布时间】:2012-07-27 19:37:08
【问题描述】:

我有我能写的最简单的 .on 函数。一开始是尝试在加载时验证表单,然后经过几分钟的挫折后,我尝试了以下操作:

  $('p').on('load',function(){
     console.log("hello"); 
  });

这甚至行不通。我很困惑。我在$(document).ready() 内外都试过了,都不管用,我还检查了控制台,我的 JS 没有错误。

是什么原因造成的,这让我很生气

【问题讨论】:

  • 你在检查什么负载? p 元素不会自然触发加载事件,因为它们不加载任何内容。
  • 什么是更好的活动?
  • 我正在尝试检查 div 何时出现在动态注入的屏幕上
  • click 有效,因为它是由用户单击元素触发的事件。理论上,点击应该对所有占用屏幕空间的元素起作用(即使它们对用户不可见)。链接不触发load 事件的相同原则适用,因此您不能调用$("a").on("load", function() {});。它只是浏览器的工作方式。如果他们将来确实开始支持 load 事件(比如在 Chrome 或 Firefox 的下一版本中),请不要指望它至少在 IE 14 之前得到支持!
  • "所以要点是我应该使用 .length 属性来检查,还是使用回调?" - 其中任何一个都应该这样做,但我认为 .length 属性在开销方面应该更好。这取决于 - 如果您将整个页面(例如 clientlist.aspx)加载到 div 中,请使用回调函数,因为您不确切知道其中会出现什么。

标签: javascript jquery html events load


【解决方案1】:

demo

您始终可以使用length 来检查是否存在:

var par = $('p.paragraph'); // make it special with some ID or class


if(par.length){         // If your elements exists....
   alert(" I'm 'LOADED!' ;) ");
}

【讨论】:

    【解决方案2】:

    ps、divs 和其他元素没有load-事件 - 这仅适用于图像、窗口、框架和 iframe。

    【讨论】:

      【解决方案3】:

      jQuery 没有办法在特定元素第一次可用时触发事件。您可以使用 setInterval 来完成,但根据具体情况,通常有更好的方法来处理它。

      setInterval(function(){
          $("p").not(".alreadyloaded").trigger("load").addClass("alreadyloaded");
      },100);
      $(document).on('load','p',function(){
          console.log("hello"); 
      });
      

      我不建议尽可能使用这种方法。

      更好的处理方法是使用添加 p 元素的事件的回调(例如 .load()$.ajax 的成功)或绑定委托事件,例如 @987654324 @

      【讨论】:

      • Hackish,但它有效。无论如何,如果可能的话,我会避免使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2022-07-06
      • 2022-11-11
      • 2016-07-23
      • 1970-01-01
      • 2017-01-27
      相关资源
      最近更新 更多