【问题标题】:Jquery $(window).load() not working on Chrome, Opera and SafariJquery $(window).load() 在 Chrome、Opera 和 Safari 上不起作用
【发布时间】:2011-12-01 00:54:31
【问题描述】:

我想解释一下我的情况。

我正在写一个网站,其中一个网页正在使用谷歌地图。

该网站是一个cms 网站,它使用的是ektron

所以,我必须使用ektron google map,因为它提供了一些客户想要的功能。

Ektron 只是简单的使用google map 并使用ajax 结合自己的逻辑。

我不知道细节,但每当我尝试更改该ektron map 的属性时,我需要单击searchzoom inzoom out 或移动地图。

只有在我这样做之后,更改的属性才会生效。如果没有,他们不会。

所以,我想到了快捷方式并以编程方式点击ektron mapsearch 按钮。

然后,我以编程方式将控件添加到 panel

我不能写 document.ready 因为我在地图加载之前发现它可以工作。

所以,我编写了这段代码来使地图正常工作。

<script type="text/javascript">
    $(window).load(function () {
        $("#__GetAddr").click();
    });
</script>

它有效。 __GetAddr 是搜索按钮 ID,我在加载完所有内容后单击它。

但是当我将它与 chrome 一起使用时,问题就开始了。

我发现$(window).load() 在 chrome、safari 和 opera 中不起作用。

我用谷歌搜索了一段时间,但找不到任何可靠的答案。

是否有任何明确的替代方法可以在这 3 种浏览器中工作,同时它仍然适用于 IE7、8、9 和 Firefox。

非常感谢。

大家好,我有一个解决方案。

我不认为这是最好的解决方案。但它有效。

<script type="text/javascript">
    if (navigator.appName == "Microsoft Internet Explorer") {
        $(window).load(function () { $("#__GetAddr").click(); });
    }
    else {
        window.addEventListener('load', function () { $("#__GetAddr").click();                  }, false);
    }
</script>

我希望有一个更好的。 :P

【问题讨论】:

  • 您是否遇到任何 JavaScript 错误?检查浏览器的控制台,看看在页面加载期间是否抛出任何错误。
  • 我认为这不是正确的方法。从表面上看,你可能会认为“当我点击时它会起作用,所以我只需要模拟那个点击。”更好的方法是找出需要调用什么函数来设置属性,并进行正确的函数调用,而不是模拟点击。
  • @LachlanMcDonald 没有错误。只是不工作。

标签: javascript jquery browser window onload


【解决方案1】:
<script type="text/javascript">
    if (navigator.appName == "Microsoft Internet Explorer") {
        $(window).load(function () { $("#__GetAddr").click(); });
    } else {
        window.addEventListener('load', function () { $("#__GetAddr").click();                  }, false);
    }
</script>

【讨论】:

  • 不适合我。 window.addEventListener 和 jquery 版本也不适合我。这些是时代,而我真的开始更讨厌 chrome,然后是 Internet Explorer。在我的测试代码中,我将两种类型的加载事件附件与 console.log 消息一起放置,然后它们都被执行了。 :(
【解决方案2】:

您是否尝试过为它准备好文档?

$(document).ready(function() {
    $("#__GetAddr").click();
});

【讨论】:

    【解决方案3】:

    这不太好,但如果您检测到浏览器不是 Chrome,则可以使用超时。但是,一旦加载,我真的会尝试从地图本身获取一些通知。

    【讨论】:

      【解决方案4】:

      您使用的是 jQuery 版本 3.1.0,并且自 jQuery 版本 1.8 起不推荐使用 load 事件。 load 事件从 jQuery 3.0 中移除。相反,您可以使用 on 方法并绑定 JavaScript 加载事件:

      $(window).on('load', function () {
            $("#__GetAddr").click();
       });
      

      【讨论】:

        【解决方案5】:

        您可以尝试 Google 在其 Maps API 文档中推荐的方法——在 body 标记中放置一个 onload 事件。这应该适用于每个浏览器:

        <body onload="ready()">
        

        然后,在脚本标签中声明下面的 ready() 函数:

        <script type="text/javascript">
        function ready() {
          $("#__GetAddr").click();
        }
        </script>
        

        【讨论】:

        • 我相信同样可以使用jQuery的$(document).ready(function(){ ... })
        • 是的,但是在地图加载之前就可以了。所以,这行不通。
        猜你喜欢
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        相关资源
        最近更新 更多