我对jQuery的理解是,文档准备就绪后脚本就会被执行。
我有一些动态生成的HTML,一旦响应从服务器返回生成的内容,就会在页面加载时生成。 HTML都是模板的一部分。所有这些都是通过以下行开始的。
window.App=new AppView;
就在那一行之后,我有
alert($("#field").val());
其中$(“#field”)是动态生成为HTML
的模板的一部分提醒NULL。
但是如果我设置一个setTimeout来执行警报,我会看到一个值。 这两行代码都在jQuery {}。
中有人可以解释为什么在执行第一行中的所有内容之前执行第二行。
P.S。这是生成模板的行
$("body").html($.tmpl("temp", data));
答案 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));
});