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

あなたにアドバイスしたい2つのこと:

1-チェックをKeyupでフックしないでください。これは、1文字を入力/削除するたびにチェックされます。これは、チェックするには多すぎるかもしれません。代わりに、ぼかしを使用してください。

2- この問題を修正する方法を理解するために、このフォームまたはその中の特定の要素に対してオートコンプリートを無効にすることができると思います。

例:

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

w3schoolsから:

autocomplete属性は、フォームのオートコンプリートをオンにするかオフにするかを指定します。

オートコンプリートがオンの場合、ブラウザーは、ユーザーが以前に入力した値に基づいて値を自動的に補完します。

ヒント: フォームのオートコンプリートを「オン」にして、特定の入力フィールドを「オフ」にすることも、その逆も可能です。

于 2013-01-22T15:32:23.703 に答える
0

これは、AJAX呼び出しを行う前にRegex(最初)で連続的にテストすることで私が言っていたことです。このように、彼らがフォーカスを持っているとき、たとえ彼らがそのオートコンプリートを使用していても、数ミリ秒後に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 に答える