从函数中调用全局对象的方法

时间:2015-01-23 12:34:37

标签: javascript jquery

我发现了如何解决问题,但我无法理解问题是什么,我知道它为什么现在正在运作。

以下是有效的代码:

function onReceive(json) {
  for (var i = 0; i < json.length; i++) {
    var m = $("<p/>", {
      "class": "message",
      html: json[i].message
    });

    $("#messages").append(m);
  }
}

我引用here

var carName = " Volvo";

// code here can use carName
function myFunction() {
  // code here can use carName
}

我的问题是,为什么这不起作用?

messages = $("#messages");

function onReceive(json) {
  for (var i = 0; i < json.length; i++) {
    var m = $("<p/>", {
      "class": "message",
      html: json[i].message
    });

    messages.append(m);
  }
}

2 个答案:

答案 0 :(得分:3)

我猜你在DOM准备好之前使用messages = $("#messages");。所以当时你的javaScript无法获得$("#messages")并且你在DOM加载后使用onReceive()函数,所以它在你的函数内部工作。

答案 1 :(得分:2)

当元素已经成为页面的一部分时,你需要获取元素。

您可以使用文档就绪回调来包装$ call,如下所示:

$(document).ready(function () {
    messages = $("#messages");
});

否则,选择器返回空集合(找不到标识为messages的元素)。

在事件处理程序中不需要这样的包装器,因为在文档准备就绪后总是调用事件回调。