我有一个程序,其中一个html按钮调用一个jQuery函数(称之为funcOne)。该函数反过来调用一个递归函数(称之为funcTwo)来改变DOM中的一些CSS。 funcTwo包含两个setTimeout()调用来延迟CSS更改,创建一种闪烁效果。
funcOne看起来像这样:
function funcOne(stringOfNumbers){
//This function does some other stuff that does not interfere with funcTwo
someUnrelatedFunction();
funcTwo(time);
return;
}
funcTwo看起来像这样:
function funcTwo(time){
if(time == ""){return true;}
var delay = time.charAt(0);
var numDelay = parseInt(delay);
setTimeout(function(){
$("#container").css("background-color", "white");
console.log("Changed to white");
}, 1000); //Arbitrary delay
setTimeout(function(){
$("#container").css("background-color", "black");
console.log("Changed to black");
}, numDelay); //Variable delay
time = time.substr(1);
return funcTwo(time);
}
控制台显示两条消息,因此我知道脚本正在运行。我没有收到任何堆栈溢出错误。 但是,两个延迟(任意和可变)都不会运行。 #container立即变黑。
我做错了什么?非常感谢任何帮助。
答案 0 :(得分:4)
我看到的一个问题是,在变为黑色之前允许的最大延迟是9毫秒。因为你给第二个变量延迟时间变量的第一个字符的值,最大的1个字符数是9.如果你希望首先将背景颜色运行为白色,我会移动第二个setTimeout()
在第一个setTimeout()
内,允许它只准备在背景为白色后运行。 setTimeout()
已准备好,并且不会立即运行该功能。这允许在代码中,在实际运行函数之前运行setTimeout()
之后的代码。
答案 1 :(得分:0)
Set Time setTimeout()有两个参数,第一个参数是一个回调函数,第二个参数是以毫秒为单位的timeInterval。所以在你的情况下你把它设置为1000秒,这是1秒。并在1秒后完全运行。
@Override
public Optional<String> isUnuque(final Users user) {
final Users dbUser = this.repository.findByEmailOrName(user.getEmail(), user.getName());
if (dbUser != null) {
if (user.getEmail().equals(dbUser.getEmail())) {
return Optional.of("Not unique email");
} else {
return Optional.of("Not unique name");
}
}
return Optional.empty();
}