我在CMS(EPiServer)内的解决方案中工作。
如果我使用console.log来检查我的对象,我会得到一个空值。
$(document).ready(function () {
console.log("$('.EPiRequester').html() =" + $('.EPiRequester').html());
});
(function myLoop(i) {
setTimeout(function () {
console.log(i + $('.EPiRequester').html());
if (--i) myLoop(i);
}, 3000)
})(10);
10次也返回null。
但如果我在控制台中检查,则html()方法返回一个值。
$('.EPiRequester').html()
"EPi Requester"
关于这个问题的任何想法?
答案 0 :(得分:1)
...我得到一个空值......
$()
和html()
都不会返回null
。我假设你的意思是$('.EPiRequester')
返回一个空的jQuery对象,或者$('.EPiRequester').html()
返回undefined
(而不是""
)。
html()
将只返回undefined
。因此,这告诉我们在 jQuery .EPiRequester
事件触发后,某些时候动态地将ready
元素添加到页面中。它甚至可以由ready
触发(例如,在执行ready
调用之前等待ajax
的CMS代码,以填写不必与主要内容交付的内容页面内容)。
理想情况下,CMS应该为您提供一些其他事件,您可以在所有内容都响应时进行响应。如果没有,这是一个非常类似的选项,你可以使用重复的setTimeout
来处理它:
$(document).ready(useEPiRequester);
function useEPiRequester() {
var elm = $('.EPiRequester');
if (elm[0]) {
// It's there now, use it...
} else {
// Not there yet, wait a bit longer
setTimeout(useEPiRequester, 50);
}
}
答案 1 :(得分:0)
要解决此问题,我更改了方法以打开对话框。用iframe打开一个Dialog我能够运行所有的javascript和jQuery。
我不明白这是什么问题。
function openModalFromIframe(that) {
require(["epi/shell/widget/dialog/Dialog"], function (Dialog) {
var url = $(that).attr('data-iframe-url');
var title = $(that).attr('data-title');
var dialog = new Dialog({
Title: title,
loadingMessage: "Loading...",
defaultActionsVisible: false,
preventCache: true,
style: "width: 800px; ",
});
dialog.attr("content", '<iframe src="' + url + '" style=" width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden;"></iframe>');
dialog.show();
});
}
如果有人在这里得到同样的问题,那就是我的解决方法。