我正在尝试使用 jquery 和面向对象将父节点附加到子节点 JavaScript。
您能否解释一下为什么 buildexpenseTable 功能 block 中的注释行不起作用。
但是下一行工作正常。
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)));
}
}
最佳答案
$
是一个函数。当 BUILD.builder
创建时,output
被填充(因此 $('outputBlock')
被执行)。如果您使用第二条语句,则在调用 buildExpenseTable
时执行$('outputBlock')
。调用。
最有可能的是,BUILD.builder
在页面完全加载并构建 DOM 之前就已初始化,因此 BUILD.builder.output
将为空。
请注意,您执行此操作的方式将导致执行 $('#bearer')
、$('#description')
等仅一次,即在创建BUILD.builder
时;因此,对 DOM 的任何后续更改都会被忽略。这可能不是您想要的?
您可以通过这样做来解决问题:
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 (.. .)
处理程序,但我宁愿不这样做。
第二个错误:您可能找不到bearer
,因为您没有指示该对象在哪里寻找它。
关于javascript - javascript 中的对象引用不起作用 Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24849074/