在Jquery中生成HTML之前执行的脚本?

时间:2011-08-31 23:23:29

标签: javascript jquery templates

我对jQuery的理解是,文档准备就绪后脚本就会被执行。

我有一些动态生成的HTML,一旦响应从服务器返回生成的内容,就会在页面加载时生成。 HTML都是模板的一部分。所有这些都是通过以下行开始的。

   window.App=new AppView;

就在那一行之后,我有

   alert($("#field").val());

其中$(“#field”)是动态生成为HTML

的模板的一部分

提醒NULL。

但是如果我设置一个setTimeout来执行警报,我会看到一个值。 这两行代码都在jQuery {}。

有人可以解释为什么在执行第一行中的所有内容之前执行第二行。

P.S。这是生成模板的行

     $("body").html($.tmpl("temp", data)); 

3 个答案:

答案 0 :(得分:1)

你应该只在DOM准备就绪时使用jQuery:

window.App=new AppView;

$(document).ready(function() { // Triggered when the whole DOM is ready
  alert($("#field").val());
});

答案 1 :(得分:1)

我想我刚刚发现了问题。您说您的代码涉及从服务器获取GET请求?嗯,这意味着异步代码。换句话说,这就是发生的事情:

You call new AppView
    - Inside AppView, a XHR is created, sending a GET request to server
    - Code finishes inside AppView, and returns to calling function
You call alert field val (not created yeat)
Some time later, the GET request is finnished
    - Inside callback-function for GET-request. Your field get's created.

答案 2 :(得分:0)

您需要将代码包装在页面加载完成时调用的事件处理程序中!

$(function() {
   $('body').html($.tmpl("temp", data));
});