как предотвратить размытие () при нажатии на ссылку в jQuery? - PullRequest
29 голосов
/ 01 октября 2011

у меня есть:

<input type="text" />

и

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

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

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

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

Спасибо

Ответы [ 4 ]

50 голосов
/ 05 февраля 2012

Я тоже должен был решить эту проблему сегодня.Я обнаружил, что событие 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;
});

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

21 голосов
/ 13 мая 2013

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

$('button').mousedown(function(){return false;});
7 голосов
/ 01 октября 2011

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

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

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

0 голосов
/ 28 августа 2018

Такое поведение можно получить, вызвав preventDefault() в событии mousedown элемента управления, по которому щелкают (в противном случае фокус был бы сфокусирован). Например:

btn.addEventListener('mousedown', function (event) {
  event.preventDefault()
})

btn.addEventListener('click', function(ev) {
    input.value += '@'
    input.setSelectionRange(ta.value.length, ta.value.length)
})

См. живой пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...