window.setTimeout未触发

时间:2012-12-06 22:20:19

标签: javascript

我确信当我发现问题是什么时我会讨厌自己,但我不能为我的生活找出为什么这不起作用。我正在网站的其他地方使用setTimeout就像这样,它工作正常。

<input type='button' value='Submit Form' onclick='ValidateForm()'/>
var submitFinalTimeout;
function ValidateForm() {
        //Performing a number of validations which may return false;

        //I know that the following if condition evaluates as true.  But just for giggles I tried moving it outside of the if and it still never fires.
        if (types.indexOf("K2") != -1) {
            submitFinalTimeout = window.setTimeout(function () { alert("Timeout set"); }, 2000);
            validateK2();
            return true;
        }

        return true;
    }

当我说验证时,我的意思是如果发现问题我会提醒使用并返回false以防止验证继续。返回值true或false不影响页面是否发布。

我还尝试删除花括号内的所有其他内容,以确保没有其他代码与之冲突。我确实尝试使用ValidateForm函数删除所有其他代码,除了setTimeout,它仍然永远不会触发。

我看到一个类似的帖子,问题是页面上的其他一些javascript错误阻止它工作。但是我在Chrome中的开发者控制台和firebug都没有在页面上显示任何错误或任何类型。关于解释图像的一些警告。

2 个答案:

答案 0 :(得分:2)

我猜测在提交表单时会调用ValidateForm。您没有看到setTimeout调用的函数的原因是页面被表单提交完全拆除,然后被结果替换。

答案 1 :(得分:0)

我想回应其他评论者:你确定正在调用该函数并且条件被评估为true?

我设置了a JS Fiddle example。一切似乎都很好,假设实际调用了ValidateForm()并且(types.indexOf(“K2”)!= -1)为真:

        if (true || types.indexOf("K2") != -1) {
            submitFinalTimeout = window.setTimeout(function() { alert("Timeout set"); }, 2000);
        }
....

        //call the function
        ValidateForm();