2010-09-22 5 views
3

Я просто хочу скрыть div, если текстовое поле теряет фокус, если только пользователь не щелкнет в другом определенном div. Если пользователь нажимает на этот конкретный div, тогда фокус не вызывает скрытие div.box.jQuery focusOut за исключением if

Ниже приведен код с комментариями псевдокода. Есть идеи?

textInput.focusout(function() { 
    // So long you didn't click div.stop, then 
     $('div.box').hide(); 
}); 

ответ

3
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-х .data для хранения значения флага против, например, div.stop элемент, например:

$('div.stop').click(function() {$(this).data('clicked', true);}); 

// ... 

    if(!$('div.stop').data('clicked')) 
// ... 

EDIT

Если вы хотите, чтобы в ситуации, когда текстовое поле имеет фокус, и вы затем нажмите на 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(); 
}); 
+0

Хммм ... вы протестировали его? Я думаю, что текстовое поле может потерять фокус перед нажатием кнопки «щелчок» на кнопке. – Strelok

+0

@Strelok - под редакцией. Я считаю, что ваша интерпретация верна. – sje397

+0

Я сделал некоторые изменения, чтобы включить его несколько раз в документе, но общее решение, которое вы указали, было правильным. Благодаря! – James

2
var flag = false; 
$('#inputID').blur(function(){ 
    $('div.box').toggle(flag);  
}); 

$('#someDIVid').click(function(){ 
    flag = true; 
}); 

simple demo

добавлены ноты:

.toggle (showOrHide)

showOrHide логическое значение, указывающее, следует ли отображать или скрывать элементы. Если этот параметр равен true, то отображаются соответствующие элементы ; если false, элементов скрыты.

+0

Нет смысла использовать здесь - 'if (! Flag) .... hide()' более эффективно и проще читать. – sje397

+0

@ sje397 - Я ожидал, что кто-то скажет это :) Но сначала ты должен был ответить, поэтому я должен думать о других путях. Что мне кажется, возможно, OP может захотеть показать окно снова после нажатия на другое поле ('div.stop' на OP), если' div.box' уже скрыт. :) – Reigel

3
$(document).bind('click',function(e) { 
    if ($(e.target).closest('div.box').length) return; 
    $('div.box').hide(); 
}); 

Попробуйте это!

Смежные вопросы