1

我有一个完美工作的 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('');
        }
    });
});
4

2 回答 2

0

我想建议你的两件事:

1-不要用Keyup勾住你的检查,每次我输入/删除一个字符时都会检查,这可能检查太多了,而是使用模糊。

2-我认为您可以尝试禁用此表单或其中的特定元素的自动完成功能,直到您弄清楚如何解决此问题。

例子:

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

来自w3schools

autocomplete属性指定表单是否应该打开或关闭自动完成功能。

启用自动完成后,浏览器会根据用户之前输入的值自动完成值。

提示:可以为表单设置“开启”自动完成功能,为特定输入字段设置“关闭”功能,反之亦然。

于 2013-01-22T15:32:23.703 回答
0

这是我在进行 AJAX 调用之前连续使用正则表达式(首先)进行测试时所说的,这样当他们有焦点时,即使他们确实使用了自动完成,几毫秒后它会触发你的 AJAX 并查看是否电子邮件被占用。

jsFiddle 演示

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);
    }
});
于 2013-01-22T15:39:37.367 回答