将参数从一个函数传递到另一个函数而不调用它

时间:2016-06-21 15:06:16

标签: javascript html-table

我试图让options或者理想情况下dynamicTableinitializeTable传递到applyTableFilters函数,我遇到了问题预期值。我使用List.js使表动态化,我需要传递或重新创建dynamicTable对象,以便我可以继续使用它来过滤表。

以下是从HTML表创建List.js对象的函数:

function initializeTable(options) { // initializes table to be dynamic using List.js functions
    var dynamicTable = new List("table-content", options);

    dynamicTable.on("updated", function (list) { // writes a message to the user if no results are found
        if (list.matchingItems.length == 0) {
            document.getElementById("no-results").style.display = "block";
        }
        else {
            document.getElementById("no-results").style.display = "none";
        }
    });

    console.log(dynamicTable);
    console.log(options);
    console.log(arguments.length);

    applyTableFilters.bind();
}

我尝试过不同的方法将变量传递给下面的函数。我尝试了.callapplyTableFilters(args).apply,但问题是我不希望函数从内部执行,只有当按钮中的click事件发生时才会执行(不是如这些功能所示)。

这是我想要传递对象的函数,并继续使用它来生成过滤器函数:

function applyTableFilters(dynamicTable) {
    var form = document.getElementById("filter-form");

    //console.log(options);

    //var dynamicTable = new List("table-content", options);

    console.log(dynamicTable);

    var filters = form.querySelectorAll('input[type="checkbox"]:checked');

    dynamicTable.filter(function (item) {
        console.log(item);
        console.log(item._values);

        if (item.values().id == 2) {
            return true;
        }

        else {
            return false;
        }

        //var filterStrings = [];

        //console.log(filters);

        //for (var i = 0; i < filters.length; i++) {
        //    var filterVal = filters[i].value;
        //    var filterString = "(" + item.values().column == filterVal + ")"; // filterVal.contains(item.values().column) || 
        //    filterStrings.push(filterString);

        //    console.log(filterVal);
        //    console.log(filterString);
        //}

        //console.log(filterStrings);

        //var filterString = filterStrings.join(" && ");

        //console.log(filterString);
        //return filterString;
    });
}

我已经使用过:

applyTableFilters.bind(this, dynamicTable/options); 
applyTableFilters.bind(null, dynamicTable/options);
applyTableFilters.bind(dynamicTable/options);

在两者之间切换,因为如果一个人最终工作,我不需要两个都通过,等等。我总是得到一个鼠标事件并且甚至不是正确类型的对象I&#39;我正在寻找。如何通过正确的对象?此外,第一个函数中的所有值都不为空,并按预期填充,因此原始变量不是未定义的或为空。提前谢谢。

1 个答案:

答案 0 :(得分:0)

initializeTable函数返回一个函数,该函数用你想要的参数包装applyTableFilters函数。

然后将返回的函数分配给稍后要执行的var。

function initializeTable(options) {
    var dynamicTable = new List("table-content", options);
    // other stuff

    return function () {
        applyTableFilters(dynamicTable)
    }
}

// other stuff

var applyTableFiltersPrep = initializeTable(options)

//  later, when you want to execute...
applyTableFiltersPrep()

JSFiddle example