我将这个变量传递给IFFE时遇到了这个问题。做了一些阅读,仍然没有弄清楚。我真的很感激这里的一些指导。
这就是我得到的:
活动:
$(document).on('click', 'input[type="checkbox"]', check);
点击处理程序:
function check() {
var id = $(this).closest('ul').attr('data-id');
return id;
}
IIFE:
var checkID = (function (val) {
var arr = [];
return function () {
var i = arr.indexOf(val);
if (i === -1) {
arr.push(val);
} else {
arr.splice(i, 1);
}
return arr;
}
})(id);
现在我正在获取ID,但却无处可归。
在我的IIFE中,我确实传递了一个id
变量,但它未定义。
那么,如何将ID
变量从check()
传递到checkID
IIFE?
其他解决方案也欢迎。
由于
答案 0 :(得分:2)
在你的clickHandler
中function check() {
var id = $(this).closest('ul').attr('data-id');
checkID(id);
}
并将checkID
更改为
var checkID = (function () {
var arr = [];
return function (val) {
var i = arr.indexOf(val);
if (i === -1) {
arr.push(val);
} else {
arr.splice(i, 1);
}
return arr;
}
})();
答案 1 :(得分:1)
我认为你需要做其他事情。您的public Enum itemType
{
FRUITS("fru"),
VEGETABLES("veg"),
LIQUOURS("liq"),
SODAS("sod");
private String dbCode;
public ItemType(String dbCode){
this.dbCode = dbCode;
}
public String getDbCode(){
return this.dbCode;
}
public static boolean isLiquid(ItemType type){
switch(t){
case SODA:
case LIQOURS: return true;
default: return false;
}
}
函数将返回事件处理程序使用的函数,但是在单击处理程序运行后,它也会调用一个回调函数来传递数组。
check
函数看起来像是你的两个函数的混搭:
check
正如您所看到的,它将一个回调函数作为参数,每次执行时都会调用它,并传递当前数组function check(callback){
var arr = [];
return function(){
var id = $(this).closest('ul').attr('data-id');
var i = arr.indexOf(id);
if (i === -1) {
arr.push(id);
} else {
arr.splice(i, 1);
}
callback(arr);
}
}
。例如,这是我的测试回调:
arr
最后,您的事件处理程序将如下所示:
function handler(arr){
alert("Array has " + arr.length + " elements");
}
答案 2 :(得分:0)
在您的 IIFE 函数中使用类似 getter/setter 的函数使其更有条理和可读性。然后,使用这些函数在您的 IIFE 函数中传递、存储和读取数据。
var checkID = (function () {
// your array
var arr = [];
// public
return {
// get
getArray: function(){
return arr;
},
// set value
setArray: function(val) {
var i = arr.indexOf(val);
if (i === -1) {
arr.push(val);
} else {
arr.splice(i, 1);
}
}
}
})();
如下使用:
checkID.getArray(); // returns default empty array []
checkID.setArray('car1');
checkID.setArray('car2');
checkID.setArray('car3');
checkID.setArray('car4');
checkID.setArray('car4'); // test splice()
checkID.getArray(); // returns ["car1", "car2", "car3"]