2015-08-26 2 views
1

Вслед за HTML DOM:

<div class="opt"> 
    Options 
    <div class="panel"> 
     <h3>i am in panel!!</h3> 
    </div> 
</div> 

Когда я нажимаю на .opt было бы показать .panel содержание, но мне нужно, чтобы вызвать другое событие, чтобы скрыть .panel при нажатии за пределами элемента .opt.

JQuery:

$('.opt').click(function(){ 
    var $this = $(this); 
    $this.find('.panel').fadeIn(); 
    $this.blur(function(){ 
     $this.find('.panel').fadeOut(); 
     alert('i am from blur'); 
    }); 
}); 

Вот демо JsFiddle

Но метод blur() не выполняется, что я делаю неправильно здесь технически?

+1

Посмотрите на http://stackoverflow.com/questions/1985292/problem-with-jquery-blur-event-on-div-element. Я пробовал свой код с атрибутом индекса вкладки, и он работает. – jnoreiga

+1

Посмотрите это: [http://stackoverflow.com/questions/1985292/problem-with-jquery-blur-event-on-div-element][1] [1]: http://stackoverflow.com/questions/1985292/problem-with-jquery-blur-event-on-div-element – DZanella

+0

Я заметил, что он работает с 'mouseleave' вместо размытия, но затем он не прослушивает клики – rakibtg

ответ

2

Это работает, если вы определяете де TabIndex свойство для DIV ... Try:

HTML

<div class="opt" tabindex="3"> 
    Options 
    <div class="panel"> 
     <h3>i am in panel!!</h3> 
    </div> 
</div> 

JS

$('.opt').click(function(){ 

    $(this).find('.panel').fadeIn(); 
    $(this).blur(function(){ 
     $(this).find('.panel').fadeOut(); 
     alert('i am from blur'); 
    }); 
}); 
1

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

event.stopPropagation(); 

для вашего обработчика щелчка opt class для этого.

Here is an example on codepen

5

Вы можете попробовать событие щелчка на теле вместо размытия. Посмотрите на https://jsfiddle.net/y0wsfpvb/7/

$('.opt').click(function(){ 
    var $this = $(this); 
    $this.find('.panel').fadeIn(); 
}); 


$('body').click(function (e){ 
    if($(e.target).closest(".opt").length > 0 == false) { 
     $('.panel').fadeOut(); 
     alert('fake blur'); 
    } 
}); 
+0

Я не понимаю, что делать, если {..} делать, когда нажимаешь на тело.можете охарактеризовать? – rakibtg

+0

Если цель - .opt, я не хочу закрывать панель, поэтому я возвращаю false для выхода из события. Событие click находится на теле, но если внутренний элемент находится внутри .opt, я возвращаю false, чтобы выйти из метода, чтобы панель открылась. –

+0

Хорошо, я думаю, было бы лучше вместо stopPropagation() на .opt .. как вы думаете? – rakibtg

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