Подтвердить что ты не робот

Как предотвратить размытие() при нажатии ссылки в jQuery?

У меня есть:

<input type="text" />

и

$('input').blur(function(){
    alert('stay focused!');
});

Я хочу, чтобы функция размытия работала, когда я "размываю", нажимая на элемент привязки.

т.е. если я перейду на другой вход, нажмите где-нибудь на странице и т.д. Я хочу, чтобы размытие было срабатывает, но если я нажму ссылку, я не хочу, чтобы она срабатывала.

Это легко достижимо или мне нужно взломать делегаты и семафоры?

Спасибо

4b9b3361

Ответ 1

Мне тоже пришлось решить эту проблему сегодня и сегодня. Я обнаружил, что событие mousedown срабатывает перед событием размытия, поэтому все, что вам нужно сделать, это установить переменную, указывающую на то, что событие mousedown произошло первым, а затем соответствующим образом управлять вашим событием размывания, если это так.

var mousedownHappened = false;

$('input').blur(function() {
    if(mousedownHappened) // cancel the blur event
    {
        alert('stay focused!');
        $('input').focus();
        mousedownHappened = false;
    }
    else   // blur event is okay
    {
        // Do stuff...
    }
});

$('a').mousedown(function() {
    mousedownHappened = true;
});

Надеюсь, это поможет вам!

Ответ 2

Если вы хотите сохранить курсор в своем положении в элементе contenteditable, просто:

$('button').mousedown(function(){return false;});

Ответ 3

Задержка размытия немного. Если зритель нажимает ссылку на другую страницу, страница должна измениться до того, как этот код получит шанс запустить:

$('input').blur(function(){
    setTimeout(function() {alert('stay focused!');}, 1000);
});

Вы можете поэкспериментировать с тем, какое значение задержки для таймаута кажется подходящим.