将两个切换功能合并为一个,切换不再起作用
Combined couple toggle functions into one, toggle doesn't function anymore
我将两个函数合并为一个函数。旧的函数是用来在选择另一个选择块时隐藏两个选择块。
它看起来像这样:
function toggle1 (){
if (getValue(elems.sel1) !== 0) { // <-- This function is getting the values of the selectfields
toggleVisibility(elems.sel2, true); // <-- This function is defining wether to hide or to show this selectfield
toggleVisibility(elems.sel3, true);
} else {
toggleVisibility(elems.sel2, false);
toggleVisibility(elems.sel3, false);
}
}
函数调用是这样的:
elems.sel1.addEventListener("change", toggle1);
我把函数改成这样:
function toggle(element, select1, select2) {
if (getValue(element) !== 0) {
toggleVisibility(select1, true);
toggleVisibility(select2, true);
} else {
toggleVisibility(select1, false);
toggleVisibility(select2, false);
}
}
调用这个函数现在看起来像:
elems.sel1.addEventListener("change", toggle(elems.sel1, elems.sel2, elems.sel3));
看起来很好…没有给我任何错误之类的…但是,切换不切换!有人能告诉我我哪里做错了吗?
如果需要:你可以在JS FIDDLE
toggle1
正在工作的原因是因为您将其作为函数引用传递给addEventListener
。
// toggle1 is passed as a reference to a function
// notice no () after it
elems.sel1.addEventListener("change", toggle1)
toggle
不工作的原因是因为你先调用它,然后传递它返回的任何东西(这是undefined
)到addEventListener
。
// toggle is called first (notice () after toggle)
// then its result is passed as the handler
elems.sel1.addEventListener("change", toggle(elems.sel1, elems.sel2, elems.sel3));
首先调用toggle(elems.sel1, elems.sel2, elems.sel3)
,然后传递侦听器作为从那里返回的任何内容:
elems.sel1.addEventListener("change", undefined);
你能做的就是让toggle
返回一个处理函数,然后监听器会触发:
function toggle(element, select1, select2) {
return function() { // <--- return a function
if (getValue(element) !== 0) {
toggleVisibility(select1, true);
toggleVisibility(select2, true);
} else {
toggleVisibility(select1, false);
toggleVisibility(select2, false);
}
}
}
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- ajax InvalidStateError:试图使用一个不可用或不再可用的对象
- 使用 Javascript 克隆了一个表;但是,某些值在克隆后不再有效
- 如何创建一个固定在屏幕底部的页脚,但当用户向下滚动时,它不再是固定的页脚
- 我可以调用一个不再存在的JS函数,但我可以'在我看来,没有调用新的JS函数
- InvalidStateError:“试图使用一个不可用或不再可用的对象”;在基本的谷歌地图教程的例子
- jQuery -当你委托一个事件处理程序时,它是否也会自动从不再匹配的元素中移除自己?
- 将两个切换功能合并为一个,切换不再起作用
- 总是显示一个DIV,只要它不再可见后,向下滚动
- 选择一个3gb的文件,提交动作触发器,超过3gb的提交动作不再工作
- 运行一个可执行文件,然后等待该特定的exe文件不再运行
- Javascript如何检查一个条件是否已经满足,并不再应用它