我试图让options
或者理想情况下dynamicTable
从initializeTable
传递到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();
}
我尝试过不同的方法将变量传递给下面的函数。我尝试了.call
,applyTableFilters(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;我正在寻找。如何通过正确的对象?此外,第一个函数中的所有值都不为空,并按预期填充,因此原始变量不是未定义的或为空。提前谢谢。
答案 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()