1

我使用 jQuery 编写了一些代码来执行 ajax 调用并在用户将焦点从字段移开时在页面上显示一条消息。我的字段被调用,用户输入一些文本并单击一个按钮以使用给定值txtLogin在数据库中创建一个新用户帐户。txtLogin

问题是有效值必须包含四个字母、一个破折号,然后再包含四个字母。我的客户坚持表格应该有两个字段,一个用于前四个字母,另一个用于后四个字母。

假设这两个字段被称为txtLogin0txtLogin1。当用户将焦点从字段移开时,我仍然想进行 ajax 调用,但是当用户从两个字段之一移动到另一个字段时,不应调用 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

一个简单的技巧是创建两个 var 来存储当前和前一个元素,onfocusonblur在计时器内调用 validate 方法,该方法将在 0 毫秒内触发。试试下面的代码,我认为它接近你想要的。

演示

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 回答