为什么不是't setTimeout在此函数中工作
Why isn't setTimeout working in this function?
我创建了一个生成选项卡的函数。它的工作原理是将元素ID作为参数,然后生成一个事件侦听器,该侦听器然后响应任何元素的单击事件。它有点复杂,所以我只发布它:
function toggleTabs() {
var panel = [], li = [];
for(var i = 1, j = arguments.length; i <= j; i++) {
li[i] = document.getElementById(arguments[i - 1]);
panel[i] = 'panel' + i;
}
document.getElementById('toggle').addEventListener('mouseup', function(event) {
var target = event.target.id;
for(var i = 1, j = li.length; i <= j; i++) {
if(li[i].id === target) {
document.getElementById(panel[i]).style.display = 'block';
setTimeout(function() {
document.getElementById(panel[i]).style.opacity = '1';
window.alert('fired');
}, 500);
li[i].className = 'active';
} else if(target.substring(0,3) === 'tab'){
document.getElementById(panel[i]).style.display = 'none';
document.getElementById(panel[i]).style.opacity = '0';
li[i].className = null;
}
}
}, false);
}
if(url === '/customers') { toggleTabs('tab-c-featured', 'tab-c-view'); }
事实上,它是有效的,但我希望元素在触发时逐渐消失,尽管元素上存在过渡,但这并没有发生。我想这可能是因为display属性也发生了变化,覆盖了不透明度的淡入效果,所以我决定添加一个超时效果,但它不起作用。我添加了一个窗口警报来测试它,但由于某种原因,它不会着火,为什么会这样?
感谢
可能存在错误。在循环内创建延迟函数调用时,有必要使用闭包。所以这里是错误的document.getElementById(panel[i]).style.opacity = '1';
当调用函数时,panel[i]
将引用panels
列表的最后一个元素。为了避免这种行为,请将您的呼叫包装为关闭,例如setTimeout(function (thePanel) {
return function(){
// do whatever you need with thePanel
}
}(panel[i]), 500);
SO 上有关于此问题的更多信息
相关文章:
- onmouseout函数工作不正常
- 我无法使onmouseout函数工作
- Javascript”;结束”;函数工作不稳定
- HTML JavaScript,我如何能够通过给每个元素一个不同的Id来使用JavaScript使这个函数工作
- Javascript:onclick函数工作一次,页面就会恢复到原来的状态
- jQuery toggle()函数工作不正常
- Node.js npm opn-can't使回调函数工作
- 添加两个数字的JavaScript函数工作不正常
- 调用在Jquery中未作为链接函数工作
- 将PHP变量传递给Javascript不能通过PHP函数工作(与全局变量无关)
- 为什么我需要在 javascript 函数工作之前按提交按钮 2 次
- 使 JavaScript 函数工作时遇到麻烦
- 如何使 clearInterval 函数工作
- 如何使 then 函数工作
- 如何让我的包含函数工作
- Promise.all 不应该作为传递给 .then 的函数工作
- 我无法让它作为 JavaScript 函数工作(我在控制台时得到我想要的返回值.log但我不能将其作为函数调用)
- JavaScript on change 函数工作得不好
- jquery next()函数工作不正常
- Jquery hasClass()函数工作不正常