jQuery函数调用不起作用
jQuery function call not working
我正试图在<span>
中添加和删除一个类,但尽管正在调用该函数,removeClass仍不起作用。
setInterval(changeClass,4000);
var spanId=1;
function changeClass(){
$('#'+spanId).addClass("hilite");
setTimeout(remove, 1000);
spanId++;}
function remove(){
$('#'+spanId).removeClass("hilite");
return true;
}
有人能说出原因吗?
我怎么能用这样的循环来做到这一点?我尝试了所有的方法,但没有让它工作
var spanSet=4;
var spanId=1;
while(spanSet > 0)
{
changeClass();
spanSet--;
}
function changeClass(){
$('#'+spanId).addClass("hilite");
setTimeout(remove, 3000);
}
function remove(){
$('#'+spanId).removeClass("hilite");
spanId++;
return true;
}
spanId
在超时结束前递增,因此您试图从下一个项而不是最后一个项中删除该类。
避免这个问题的通常方法是使用闭包,但在这种情况下,将spanId++;
移动到remove
函数的末尾会简单得多。
闭包方法(在这种情况下,我不推荐它,因为与移动增量相比,它过于复杂)可能看起来是这样的:
setInterval(changeClass, 4000);
var spanId = 1;
function changeClass() {
$('#' + spanId).addClass("hilite");
setTimeout(
remove(spanId), // CALL remove and pass spanId as an argument
1000
);
spanId++;
}
function remove(spanId) {
return function () { // RETURN a function from remove().
// Note: This spanId is the local variable defined in the argument list
// not the one that exists in the wider scope
$('#' + spanId).removeClass("hilite");
return true;
}
}
您应该这样说:
setInterval(changeClass, 4000);
var spanId = 1;
function changeClass() {
$('#'+spanId).addClass("hilite");
setTimeout(remove, 1000);
}
function remove() {
$('#'+spanId).removeClass("hilite");
spanId++; // <--
return true;
}
编辑:【由于昆汀建议使用diff工具,感谢昆汀】
我把spanId++放在remove函数的末尾,这样每次调用changeClass和remove函数时都使用相同的spanId值。
function changeClass(){
$('#'+spanId).addClass("hilite");
setTimeout(remove, 1000);
spanId++;}
在这段代码中,您应该在回调函数中执行spanId++
,该函数作为参数传递给setTimeout,因为JS在完成setTimeout语句之前不会停止执行。
所以你的代码应该是这样的:
function changeClass(){
$('#'+spanId).addClass("hilite");
setTimeout(remove, 1000);
}
function remove(){
$('#'+spanId).removeClass("hilite");
spanId++;
return true;
}
这对我很有效,还添加了一些超时控制。
changeClass();
function changeClass(){
$("#container").addClass("box");
console.log("changeClass()");
clearTimeout(interval);
interval = setTimeout(remove, 1000);
}
function remove(){
$("#container").removeClass("box");
console.log("remove()");
clearTimeout(interval);
interval = setInterval(changeClass,1000);
}
相关文章:
- JavaScript链接在点击时不起作用;函数在页面加载时工作
- I'我试图在文本区域中进行特定的输入,调用特定的javascript函数,但没有成功;不起作用
- javascript函数调用不起作用
- 从PHP调用JS函数不起作用
- 函数调用不起作用
- 我的函数调用在回显中不起作用
- JavaScript 函数在 php 代码中的调用中不起作用
- 我的函数不起作用,Ajax调用,JQuery,调用外部?我不知道
- php 函数的按钮在 ajax 调用后不起作用
- 对javascript中函数的调用在IE中不起作用
- 对已定义函数的第二次调用;不起作用
- onclick函数调用在apachecordova(6.1.1版)中不起作用
- 为什么这个javascript函数调用不起作用
- 从obj c类调用javascript函数对我不起作用
- jQuery函数调用不起作用
- 在onload上调用两个函数不起作用
- 多个AJAX调用调用相同的成功函数不起作用
- 为什么 Javascript 函数调用在从代码隐藏更改可见性后不起作用
- 为什么当我调用具有返回值的函数时,我的 onclick 事件不起作用
- Javascript 表单验证不起作用 - 未调用脚本