1

jQuery を使用して ajax 呼び出しを行い、ユーザーがフィールドからフォーカスを移動したときにページにメッセージを表示するコードをいくつか作成しました。私のフィールドが呼び出されtxtLogin、ユーザーはテキストを入力してボタンをクリックし、指定されたtxtLogin値を使用してデータベースに新しいユーザー アカウントを作成します。

問題は、有効な値には 4 文字、ダッシュ、さらに 4 文字を含める必要があることです。私のクライアントは、フォームには最初の 4 文字用と次の 4 文字用の 2 つのフィールドが必要だと主張しています。

これら 2 つのフィールドが と と呼ばれtxtLogin0ているとしtxtLogin1ます。ユーザーがフィールドからフォーカスを移動したときに ajax 呼び出しを実行したいのですが、ユーザーが 2 つのフィールドのいずれかから別のフィールドに移動したときに ajax 呼び出しを呼び出すべきではありません。

私の現在のコードは次のようになります。

$('#txtLogin').blur(function() {
    var login = $(this).val();
    var isValid = testLogin(login);
    if (!isValid) alert('Login is invalid');
});

新しいコードは次のようになると思います。

$('#txtLogin0').add('#txtLogin1').blur(function() {
    var focusId = The Id of the newly focused element
    if (focusId==='txtLogin0' || focusId==='txtLogin1) return
    var login = $(#txtLogin0').val() + '-' + $('#txtLogin1').val();
    var isValid = testLogin(login);
    if (!isValid) alert('Login is invalid');
});

jQuery.blur イベントでフォーカスが移動する要素の ID を取得するにはどうすればよいですか?

4

2 に答える 2

1

onfocus簡単なハックは、現在と前の要素を格納する 2 つの var を作成しonblur、0 ミリ秒でトリガーされるタイマー内で validate メソッドを呼び出すことです. 以下のコードを試してみてください。

デモ

var prevEl, curEl;
$(document).ready(function() {
    $('#txtLogin0, #txtLogin1').blur(function() {
        prevEl = this.id;

        setTimeout(validateLogin, 0);

    }).focus(function() {
        curEl = this.id;
    });
});

function validateLogin() {
    if ((prevEl === 'txtLogin0' && curEl === 'txtLogin1') || (curEl === 'txtLogin0' && prevEl === 'txtLogin1')) {
        return;
    }
    prevEl = ''; curEl = '';
    var login = $('#txtLogin0').val() + '-' + $('#txtLogin1').val();
    var isValid = testLogin(login);
    if (!isValid) alert('Login is invalid');
}

function testLogin(txt) {
    return false;
}
于 2012-04-05T21:34:47.180 に答える
-2
var focusId = $(this).attr('id');
于 2012-04-05T21:18:32.203 に答える