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

标签 javascript jquery

我正在尝试使用 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/

相关文章:

javascript - 是否可以在 JavaScript 中包含 HTML 代码?

javascript - Ember 文档理解 - 模型是否链接到模板?

javascript - 将 Laravel 分页与 Ajax 请求结合使用

jquery - 带有 jQ​​uery 的 HTML5 - e.offsetX 在 Firefox 中未定义

javascript - jquery setTimeout 太多递归

javascript - 使用 Promise 将动画链接在一起的最简单方法是什么?

javascript - 当节点太小时,如何在 d3 中隐藏文本标签?

javascript - 将 JS 变量从一个页面传递到另一个页面

javascript - 使用可选的自定义函数 onclick 扩展单个 toastr 创建

jquery - 如何在JQuery中保存$.getJSON返回值