jquery文件就绪返回null但控制台能够获得值

时间:2014-08-05 07:23:52

标签: javascript jquery episerver

我在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"

关于这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

  

...我得到一个空值......

$()html()都不会返回null。我假设你的意思是$('.EPiRequester')返回一个空的jQuery对象,或者$('.EPiRequester').html()返回undefined(而不是"")。

如果你在一个空的jQuery集上调用它,

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();
    });
}

如果有人在这里得到同样的问题,那就是我的解决方法。