当用户使用自动填充时,jQuery电子邮件可用性无法检查

当用户使用自动填充时,jQuery电子邮件可用性无法检查,jquery,Jquery,我有一个完美的jQuery功能,它可以检查电子邮件是否可用,但是,如果浏览器向他们提供自动填充建议,它不会识别是否输入了其他信件。例如,用户开始输入admin@admin.com但是,在“adm”中,他们使用下拉列表中的自动填充。jQuery仍然认为只输入了adm $(function () { $('#email').keyup(function () { var email = $(this).val(); if (email != '' && email.l

我有一个完美的jQuery功能,它可以检查电子邮件是否可用,但是,如果浏览器向他们提供自动填充建议,它不会识别是否输入了其他信件。例如,用户开始输入admin@admin.com但是,在“adm”中,他们使用下拉列表中的自动填充。jQuery仍然认为只输入了adm

$(function () {
$('#email').keyup(function () {
    var email = $(this).val();
    if (email != '' && email.length > 6) {
        //$('.check').show();
        $('error').fadeIn(400).html
        var dataString = 'email=' + email;
        $.ajax({
            type: "POST",
            url: "pages/check_email.php",
            data: dataString,
            cache: false,
            success: function (result) {
                if (result == 'Available') {
                    $('.check').html('Available');
                } else {
                    $('.check').html('Unavailable');
                }
            }
        });
    } else {
        $('.check').html('');
        }
    });
});

我想给你两个建议:

1-不要用Keyup钩住你的支票,每次我输入/删除一个字符时都会检查,这可能太难检查了,取而代之的是使用blur

2-我认为您可以尝试禁用此表单的自动完成功能,或者禁用其中的特定元素,直到您找到解决此问题的方法

例如:

<form id="myForm" autocomplete="off" method="post">

发件人:

autocomplete属性指定窗体是否应具有 自动完成打开或关闭

启用“自动完成”时,浏览器会自动完成值 基于用户以前输入的值

提示:表单可以有自动完成“开”和“关” 用于特定输入字段,反之亦然


下面是我在使用Regex(first)进行测试时所说的话,在执行AJAX调用之前,使用Regex(first)持续,这样当他们有焦点时,即使他们使用了自动完成,在几毫秒后,它会触发您的AJAX并查看电子邮件是否被接收


我建议只有当他们关注文本框时才进行间隔/限制循环,测试它是否是有效的电子邮件(regex-wise)whatever@whatever.com,然后将其发送到AJAX。除非它是一封有效的电子邮件,否则它不会杀死你的服务器!如果您没有真正使用该插件,请不要将问题标记为
[jquery validate]
。已删除。谢谢,我已采纳您的建议并将自动完成添加到表单中。希望这已解决您的问题。:)很乐意帮忙!我想说的是最好每100毫秒运行一次间隔时间,甚至不知道为什么我会在半秒钟内运行一次。哈哈,该检查工作得非常完美。然而,它返回的结果对于所有电子邮件都不可用,我认为这与框架中的第16行有关——在侧边栏上,您没有选择jQuery(1.7.2或更高版本)。我已经在JSFIDLE中对其进行了修改,不幸的是,一旦验证,它仍然返回所有电子邮件地址都不可用!您不能在JSFIDLE中运行任何AJAX,不幸的是,您必须在自己的页面上进行实时测试。
var testInterval;

$('#email').on({
    focus: function () {
        var _this = $(this);

        testInterval = setInterval(function () {
            var val = _this.val();

            if (/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(val)) {

                clearInterval(testInterval);
                // valid email
                // now do AJAX!
            }
        }, 100); 
    },

    blur: function () {
        clearInterval(testInterval);
    }
});