我正在尝试使用jquery和面向对象的子节点追加父节点 的JavaScript。
请解释为什么buildexpenseTable功能块中的注释行不起作用。
但下一行效果很好。
var BUILD = BUILD || {};
BUILD.protoType = {
expenseDiv : function(bearer){
return "<P>hai</p>";
}
}
BUILD.builder = {
bearer : $("#bearer"),
desc : $("#description"),
amount : $("#amount"),
output : $("#outputBlock"),
buildExpenseTable : function (){
//BUILD.builder.output.append($(BUILD.protoType.expenseDiv(bearer.value)));
$("#outputBlock").append($(BUILD.protoType.expenseDiv(bearer.value)));
}
}
答案 0 :(得分:1)
$
是一个功能。当output
创建时,会填充$('outputBlock')
(因此会执行BUILD.builder
)。如果您使用第二个语句,则在$('outputBlock')
时执行buildExpenseTable
。
最有可能的是,BUILD.builder
在页面完全加载并且构建了DOM之前已初始化,因此BUILD.builder.output
将为空。
请注意,此外,您执行此操作的方式将导致$('#bearer')
,$('#description')
等仅执行一次,即{{1} } 被建造;因此,忽略对DOM的任何后续更改。那可能不是你想要的?
您可以通过以下方式解决问题:
BUILD.builder
如果你完全确定你真的想要“一次又一次”的初始化,那么将BUILD.builder = {
bearer : function () { return $("#bearer") },
desc : function () { return $("#description") },
amount : function () { return $("#amount") },
output : function () { return $("#outputBlock") },
buildExpenseTable : function (){
BUILD.builder.output ().append($(BUILD.protoType.expenseDiv(BUILD.builder.bearer ().value)));
}
}
的初始化放到BUILD.builder
处理程序中,但我宁愿不这样做。
第二个错误:您可能找不到$(document).ready (...)
,因为您没有指明对象在哪里寻找它。