【问题标题】:javascript executes only on page refresh - Squarespace site, NO Turbolinks involvedjavascript 仅在页面刷新时执行 - Squarespace 网站,不涉及 Turbolinks
【发布时间】:2019-05-14 02:23:21
【问题描述】:

这个网站上有类似的问题标题,我已经阅读了他们所有的解决方案,但问题总是与 Turbolinks 或其他问题有关。在这种情况下,我只使用 javascript/jQuery,所以这些解决方案是无关紧要的。

我编写了一个简单的脚本,它找到最高的容器,然后将块中的其余容器调整为与最高容器相同的高度。我将此脚本应用于 Squarespace 汇总块,以便同一块中的所有汇总项具有相同的高度。

然后我添加了一个条件语句,该语句将导致此功能仅在屏幕宽度超过 810 像素时执行。

结果是这个脚本完全按照它应该的方式工作,但只有当我直接进入页面或刷新页面时。如果我从另一个页面导航到该页面,它不起作用。

    $(function() {
     if($(window).width() > 810){
     var maxheight=-1;
     $('#block-yui_3_17_2_25_1494432854570_9795 .summary-excerpt').each(function() {
      if(maxheight < $(this).height())
      {
          maxheight = $(this).height();
      }
     });
     $('#block-yui_3_17_2_25_1494432854570_9795 .summary-excerpt').each(function() {
 $(this).height(maxheight);
     }); 
   }
});

非常感谢任何想法,因为我已经研究了与我相似的每个问题,并且没有一个解决方案对我有用。

注意:我没有收到错误消息。我在 if 语句之前放置了一个 alert() ,并确认当您从另一个页面导航到该页面时该函数不会运行。但是,当我按预期刷新页面时,我确实会收到警报。

【问题讨论】:

  • 我认为您需要定义“不起作用”。你有错误吗?您是否尝试在 if 语句之前放置 console.log() 语句以查看实际上是否正在调用该函数?
  • 我没有收到错误。我在 if 语句之前放置了一个 alert() ,并确认当您从另一个页面导航到该页面时该函数不会运行。当然,我会在刷新页面时收到警报。

标签: javascript jquery responsive-design squarespace


【解决方案1】:

在 Squarespace 中,当您的自定义 Javascript 仅在页面刷新后才能工作时,它很可能与 Squarespace's AJAX loading 有关:

有时,Ajax 可能会与嵌入的自定义代码或锚点发生冲突 链接。 Ajax 还可以干扰站点分析,记录点击 仅限第一页。

您可以为您的模板禁用 AJAX。或者,请参阅此处概述的其他方法:JavaScript only being called once in Squarespace

【讨论】:

  • 非常感谢布兰登,但我仍然没有解决问题。我尝试同时使用 window.Template.Constants.AJAXLOADER = false;和 window.onload = function() { this.AjaxLoader.prototype.initializeSqsBlocks = function () { window.SQS.Lifecycle.init(); console.log("Foo!"); window.CUSTOM.YourCustomInitFunction(); } };在 Header 代码注入中,但它没有效果。 =(
  • 您是否首先尝试完全禁用 AJAX 以验证问题所在?您是否也尝试过这个:window.addEventListener("mercury:load", function(){ // do stuff });,如链接到的答案中所建议的那样?
  • 我终于在样式编辑器中找到了禁用 AJAX 加载的选项(它不像说明所说的那样出现在“site:loading”下),现在一切正常。非常感谢。
最近更新 更多