javascript - 加载窗口时 setInterval 在 Chrome 和 Firefox 中不起作用

标签 javascript jquery css google-chrome

当我第一次进入登录页面时,我的 setInterval 函数似乎在 Chrome 和 FF 中不起作用,但在 IE 中起作用。

我想检测用户是否已请求将其登录数据保存为登录表单的一部分。如果已保存,则登录按钮应为绿色。目前,它没有检测到表单已记住凭据并且按钮显示为灰色:

$(window).load(function () {
    setTimeout(function () {
        $(".busy-dialog").fadeOut(500);
    }, 1000);
    var evt = document.createEvent("Events");
    evt.initEvent("click", true, true);
    window.dispatchEvent(evt);
    setInterval(function () {checkLogin();}, 200);
}); 

checkLogin 函数的位置很简单:

function checkLogin() {
    var email = $("#username").val();
    var password = $("#password").val();
    if (email != '' && email != undefined && password != '' && password != undefined) {
        $("#loginform .button.primary").attr('disabled', false);
        $("#loginForm .button.primary").prop('disabled', false);
    } else {
        $("#loginForm .button.primary").attr('disabled', true);
        $("#loginForm .button.primary").prop('disabled', true);
    }
}

最佳答案

我建议您避免在这个用例中使用 setInterval

即使您打算使用它,也必须在验证表单后清除它。同时增加计时器间隔。 200 毫秒太短了,而且您要多次触发该功能。

var timer = setInterval(checkLogin, 500);

在您的 checkLogin() 函数中。

function checkLogin() {
    var email = $("#username").val();
    var password = $("#password").val();
    if (!!email && !!password) {
        $("#loginform .button.primary").attr('disabled', false);
        clearInterval(timer);
    } else {
        $("#loginForm .button.primary").attr('disabled', true);
    }
}

您可以使用keypressinput 事件来检查它们是否已填充,而不是setInterval

关于javascript - 加载窗口时 setInterval 在 Chrome 和 Firefox 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29489988/

相关文章:

javascript - jQuery - 是否可以在克隆期间更改选择框的选项?

javascript - ajax获取数组项中的元素

html - Gmail 不允许 margin 属性(property)

javascript - 为屏幕上的位置添加监听器

javascript - JQuery代码没有效果

javascript - jquery动态创建html元素

javascript - 即使手动 URL 有效,网站也无法识别 GET

javascript - jquery动画帮助

css - 用 htmlunit 驱动替换 firefox 驱动

javascript - Javascript For 循环上的意外 token 非法