我有一个 html 页面 Home.htm
,其中包含一个 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
中,我已经使用jQuery
设置了自定义事件data-available
及其处理程序,如下所示;
<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/