jquery focusout, за исключением случаев, если
-
04-10-2019 - |
Вопрос
Я просто хочу скрыть div, если текстовое поле теряет фокус, если только пользователь нажимает в другом определенном div. Если пользователь нажимает на этот конкретный div, то фокус не запускает shiv.box hidden.
Ниже приведен код с моим прокомментированием псевдокода. Есть идеи?
textInput.focusout(function() {
// So long you didn't click div.stop, then
$('div.box').hide();
});
Решение
var flag = false;
$('div.stop').click(function() {flag = true;});
textInput.focusout(function() {
// So long you didn't click div.stop, then
if(!flag)
$('div.box').hide();
});
Если вы хотите избежать добавления переменной флаги, вы можете использовать jQuery's .данные хранить значение флага против, например, div.stop
Элемент, например:
$('div.stop').click(function() {$(this).data('clicked', true);});
// ...
if(!$('div.stop').data('clicked'))
// ...
РЕДАКТИРОВАТЬ
Если вы хотите разрешить ситуацию, когда текстовое поле имеет фокус, а затем вы нажимаете на div.stop
, и вы не хотите, чтобы это скрыть, тогда вы можете попробовать что-то вроде:
$('div.stop').click(function() {$('div.box').stop();});
textInput.focusout(function() {
// So long you didn't click div.stop, then
$('div.box').delay(200).hide();
});
Другие советы
$(document).bind('click',function(e) {
if ($(e.target).closest('div.box').length) return;
$('div.box').hide();
});
Попробуй это!
var flag = false;
$('#inputID').blur(function(){
$('div.box').toggle(flag);
});
$('#someDIVid').click(function(){
flag = true;
});
простое демонстрация
Добавлены примечания:
.toggle (ShoworHide)
витрина Логический, указывающий, показывают ли или скрывать элементы. Если этот параметр
true
, затем соответствовал Элементы показаны; еслиfalse
, то Элементы скрыты.