javascript中的对象引用不起作用Jquery

时间:2014-07-20 09:20:57

标签: javascript jquery

我正在尝试使用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)));
    }
}

1 个答案:

答案 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 (...),因为您没有指明对象在哪里寻找它。