jQuery втрачає фокус подія


253

Я намагаюся показати контейнер, якщо поле введення отримує фокус, і - це актуальна проблема - приховати контейнер, якщо фокус втрачено. Чи є протилежна подія для фокусування jQuery?

Деякі приклади коду:

<input type="text" value="" name="filter" id="filter"/>

<div id="options">some cool options</div>

<script type="text/javascript">
  $('#options').hide();

  $('#filter').focus(function() {
    $('#options').appear();
  });
</script>

І я хотів би зробити щось подібне:

$('#filter').focus_lost(function() {
  $('#options').hide();
});

Відповіді:


419

Використовуйте подію розмиття, щоб викликати свою функцію, коли елемент втрачає фокус:

$('#filter').blur(function() {
  $('#options').hide();
});

3
що робити, якщо браузер, як хром, автоматично заповнить текстове поле, я не думаю, що це спровокує розмиття ()
pita

40

Подобається це:

$(selector).focusout(function () {
    //Your Code
});

10
яка різниця від цього до blur?
Крегокс

5
Метод розмиття використовується для видалення фокуса (тобто для здійснення не поточного) об'єкта, якому він належить. Надавши текстове поле, розмиття перемістить курсор у наступне поле. Надавши вікно, розмиття перемістить його за всіма іншими. Це не зарезервоване слово, тому ви можете оголосити власну змінну або функцію, яку називають розмиття, але якщо ви це зробите, ви не зможете використовувати цей метод для управління тим, який об’єкт є поточним.
SoftwareARM

2
Метод фокусування використовується для того, щоб надати фокус (тобто зробити поточним) об'єкт, якому він належить. Якщо надати текстове поле, фокус перемістить курсор на це поле. Якщо надати вікно фокус, він перемістить його перед усіма іншими. Дії, які не визначають конкретний об’єкт, слід застосувати, щоб використовувати той, на якому є фокус. Це не зарезервоване слово, тому ви можете оголосити власну змінну або функцію, що називається фокус, але якщо ви це зробите, ви не зможете використовувати цей метод для управління тим, який об’єкт є поточним.
SoftwareARM

25
Пояснення SoftwareARM для мене не мали особливого сенсу при першому читанні, тому я знайшов альтернативне пояснення на сторінці документації jQuery ( api.jquery.com/focusout ), яке, на мою думку, буде корисним для інших: подія фокусування направляється елементу коли він, або будь-який елемент всередині нього, втрачає фокус. Це відрізняється від події розмивання тим, що він підтримує виявлення втрати фокусу від батьківських елементів (іншими словами, він підтримує бульбашку подій).
Бред


12

подія розмиття: коли елемент втрачає фокус.

подія фокусування: коли елемент або будь-який елемент всередині нього втрачає фокус.

Оскільки всередині фільтруючого елемента немає нічого, в цьому випадку працюватимуть розмиття та фокусування.

$(function() {
  $('#filter').blur(function() {
    $('#options').hide();
  });
})

jsfiddle з розмиттям: http://jsfiddle.net/yznhb8pc/

$(function() {
  $('#filter').focusout(function() {
    $('#options').hide();
  });
})

jsfiddle з фокусуванням: http://jsfiddle.net/yznhb8pc/1/


0

Якщо "Класні параметри" приховані від подання, перш ніж поле зосереджене, ви хочете створити це в JQuery замість того, щоб мати його в DOM, щоб кожен, хто використовує зчитувач екрана, не побачив зайвої інформації. Чому вони повинні слухати його, коли ми не повинні бачити його?

Таким чином, ви можете налаштувати такі змінні:

var $coolOptions= $("<div id='options'></div>").text("Some cool options");

а потім додайте (або додайте) фокус

$("input[name='input_name']").focus(function() {
    $(this).append($coolOptions);
});

а потім видаліть, коли фокус закінчиться

$("input[name='input_name']").focusout(function() {
    $('#options').remove();
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.