我有一个HTML页面Home.htm,其中包含一个iframe,该iframe包含另一个页面Child.htm,即

<body>
   <div>
      <iframe id="child-iframe" src="Child.htm"></iframe>
   </div>
</body>


Home.htm还包含一些javascript/jQuery来检索数据,并根据此数据检索更多信息,然后触发在Child.htm文件中设置的事件以在Child.htm中显示此信息,即

<script>
   $(document).ready(function () {
      $.getJSON("http://getsummarydata/001")
         .done(function (data) {
             if (data meets some condition) {
                 $.getJSON("http://getspecificdata/001")
                    .done(function (data) {
                       // Trigger the event
                       var target = $("#child-iframe");
                       if (target[0] !== undefined) {
                           target[0].contentWindow.$(target[0].contentWindow.document).trigger("data-available", [data]);
                       }
                 });
             }
         }
   });
</script>


Child.htm中,我使用data-available设置了自定义事件jQuery及其处理程序,如下所示;

<script>

   // Event handler
   function myFunc(data) {
      // Display the data
   }

   // Event
   $(document).on('data-available', function (__e, __data) {
      myFunc(__data);
   });

</script>


首次加载Home.htm页面时,将成功检索数据,将触发该事件,并在iframe中按预期显示数据。但是,当我刷新Home.htm(F5)时,仍恢复数据,但不再触发该触发器-实际上,我得到以下错误。

Uncaught TypeError: target[0].contentWindow.$ is not a function


即使target [0] .contentWindow看起来也不错。

我不知道为什么会在刷新时发生这种情况以及解决该问题的任何帮助。

保罗

最佳答案

听起来您的事件在iframe完全加载之前就触发了。这就可以解释为什么它在需要时找不到$的原因,但是当您检查它时却找不到它。一个潜在的原因可能是您的数据请求已缓存,因此几乎立即返回。

关于javascript - jQuery.trigger()不在刷新时触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33543392/

10-15 05:45