在$(document).ready()函数中找不到DOM的body元素

时间:2016-01-25 17:50:00

标签: javascript jquery angularjs

我正在编写一个AngularJS Web应用程序,并且在任何需要调用范围内的函数的范围之外都有一个函数。我调用该函数并按照this回答中给出的说明进行操作。

function returnDest(callback) {
$(document).ready(angular.element(document.getElementById('body')).scope().getTask(function() {
    if(callback) {
        callback(locationInfo);
    }
}));
}

它经常工作,但有时功能无法成功运行。调试器给了我:

Uncaught TypeError: Cannot read property 'getTask' of undefined

我不知道为什么当$(document).ready在加载DOM之后才应该触发函数时,为什么函数被调用undefined。如果我使用$(window).load(),则会弹出相同的错误。我该怎么做才能确保此功能成功运行?

作为参考,这里是HTML文件中定义'body'元素的行

<body style="background-color:#e6e8f3" ng-app="app" ng-controller="controller" id="body">

3 个答案:

答案 0 :(得分:2)

$(document).ready应该在你的职能范围之外:

$(document).ready(function returnDest(callback) {
angular.element(document.getElementById('body')).scope().getTask(function() {
    if(callback) {
        callback(locationInfo);
    }
})});

答案 1 :(得分:0)

angular.element返回一个jQuery对象。

ready()期望您传递的参数为函数,它将在文档准备就绪时调用。

听起来你需要将你想要传递的所有内容包裹在ready中的function () { ... }

答案 2 :(得分:0)

您未正确使用.ready。在您准备好DOM之前调用returnDest的那一刻,它会尝试获取ID为body的元素。由于未加载,因此无法访问body。相反,省略body ID并像这样使用它:

function returnDest(callback) {
  $(document).ready(function() {
    angular.element(document.body).scope().getTask(function() {
      if (callback) {
        callback(locationInfo); // Not sure where locationInfo is coming from
      }
    });
  });
}