【问题标题】:Passing object and its methods to onchange function in Javascript在Javascript中将对象及其方法传递给onchange函数
【发布时间】:2017-09-03 08:11:12
【问题描述】:

我正在使用 TableExport.js 脚本导出一个 html 表,我需要在通过隐藏我不想要的行来过滤数据后导出数据。 TableExport 的方法.update() 在这里非常有用,但是每次过滤数据时调用它都会遇到一些问题,这与onchange 事件相关联。以下是我的代码的相关部分:

$(function () {
    var exportedTable = $("#taskListTable").tableExport();
    exportedTable.update({
        // some options
    });

    $('body').on('change', '.filter', function (exportedTable) {
        // some code for filtering
        tableUpdate(exportedTable);
    });
})

function tableUpdate(table) {
    table.update({
        ignoreCSS: ["tr.tableexport-ignore", "tr.tableexport-ignore>td",
                    "tr.tableexport-ignore>th", "tr.hidden", "tr.hidden>td"]
    });
}

我不断收到Uncaught TypeError: Cannot read property 'update' of undefined 类型的错误。我一直在阅读大量线程(例如:Javascript passing object to function)和其他信息以了解按值传递和引用之间的区别,但是我阅读和尝试的越多,我的头脑就越混乱。那么任何人都可以看到我的方法失败了吗? - 虽然它是部分遗留代码,但我愿意在必要时重新构建大部分代码。

我想这更多是 JS 滥用的问题,所以我希望这个问题对使用 TableExport 的人和有类似 JS 问题的人都有用。所以我召唤你,JavaScript Jedis!

【问题讨论】:

  • 改成$('body').on('change', '.filter', function () {就行了!该对象已经被困在一个闭包中,所以只需使用它!
  • 谢谢!有效!你知道我可以进一步深入研究闭包的任何解释清楚的来源吗? :)
  • 是的:First choice :D,然后是 thisthis

标签: javascript jquery function methods jquery-events


【解决方案1】:

正如@guest 所说,您只需从参数中删除exportedTable:

$('body').on('change', '.filter', function () {
    # some code for filtering
    tableUpdate(exportedTable);
});

【讨论】:

  • 干杯!那是我的错误:)
【解决方案2】:

使用事件对象作为参数调用事件处理函数。您可能只是想从范围内访问 exportedTable,而不是接受它作为参数。

【讨论】:

  • 很好地解释,并作为一个魅力。这样一个愚蠢的错误虽然呵呵
猜你喜欢
  • 2011-04-20
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2014-07-15
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多