2013-09-30 3 views
0

У меня есть всплывающее окно, которое отображается только при нажатии на определенную кнопку. Он даже скрывается при нажатии на ту же кнопку. Моя проблема в том, что я также хочу скрыть div, когда вы щелкнули где-нибудь снаружи. Я не могу этого сделать, потому что popup div находится внутри основного класса-оболочки и не может этого сделать, используя событие click в классе-оболочке и скрывая его. Это мой код:Закрыть всплывающее окно при нажатии на внешнюю сторону

function showHide() { 
    var ele = document.getElementById("div_fieldWorkers"); 

    if (ele.style.display == "block") {   
     ele.style.display = "none"; 
    } else { 
     ele.style.display = "block";  
    } 
} 

<input type="button" value="Add Field Worker" id="btnFieldWorkers" onclick="return showHide();" class="btn btn-primary" /> 
+0

Покажите нам свою разметку –

+0

Добавьте код html и код js для всплывающего окна. –

+0

Не могли бы вы также поделиться своей разметкой? – Neikos

ответ

1

Проверьте это: http://jsfiddle.net/d4SsZ/1/

После доработки: http://jsfiddle.net/d4SsZ/3/

Просто сниппет: Validate для нулевых и неопределенных JS ошибки, если таковые имеются.

Markup:

<div id="div_fieldWorkers" class="form_size" style='display:none;' class='noclick'><span class='noclick'>Hello How are you?</span></div> 
<input 
    type="button" 
    value="Add Field Worker" 
    id="btnFieldWorkers" 
    class="btn btn-primary" /> 

Javascript:

$('#btnFieldWorkers').bind("click", ToggleDisplay); 

function ToggleDisplay() { 
    if ($("#div_fieldWorkers").data('shown')) 
     hide(); 
    else 
     display(); 
} 

function display() {  
    if ($("#div_fieldWorkers").children().length > 0) { 
     $("#div_fieldWorkers").fadeIn(500, function() { 
      $(document).bind("click", function() {hide(); });    
      $("#div_fieldWorkers").data('shown', true)});   
    } 
} 

function hide() { 
    if (window.event.toElement.className != 'noclick') { 
     $("#div_fieldWorkers").fadeOut(500, function() { 
      $(document).unbind("click"); 
      $("#div_fieldWorkers").data('shown', false);     
     }); 
    } 
} 
+0

Ничего себе .. это сработало .. Thanx много .. :) – Manu

+0

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

+0

@ user2829939 Проверьте это http://jsfiddle.net/d4SsZ/3/ Просто добавленный класс, поскольку noclick и onhide пропустили событие click. Там может быть хороший подход, чем это. На данный момент: это сработает для вас. –

0

Решение этой проблемы здесь: Use jQuery to hide a DIV when the user clicks outside of it

Кроме того, вы помечено этот вопрос Jquery, но ваш код чистый JavaScript. При использовании JQuery, вы можете написать только

$('#div_fieldWorkers').toggle(); 

в вашем OnClick.

+0

да .. но это не сработало с этим кодом. Проблема заключается в том, что popup div находится внутри основного класса-оболочки. Всякий раз, когда я запускаю событие клика за пределами div (то есть на класс оболочки), чтобы скрыть его, он вообще не работает. Он отдает приоритет событию кликов класса обертки, и поэтому div всегда остается скрытым. – Manu

0

Создать событие click на элементе body и stopPropagation. это позволяет событию вызывать событие click только на кнопке. Затем проверьте, что целевой элемент клика не является всплывающим div. Пример:

$(function(){ 
    $("#btnFieldWorkers").click(function(e){  
     e.stopPropagation(); 
     $("#div_fieldWorkers").show(); 
     $("body").click(function(e){ 
      if(e.target.id != "div_fieldWorkers") 
      { 
       $("#div_fieldWorkers").hide(); 
       $("body").unbind("click"); 
      } 
     }); 
    }); 

}); 

jsfiddle

+0

, когда я нажимаю внутри div. Он скрывается .. я хочу, если пользователь нажимает внутри div. Он не скрывает себя, поскольку он содержит форму, которую должен заполнить пользователь – Manu

+0

, см. Ссылку jsFiddle. Это не должно исчезнуть. показать мне свой код – Dvir

0

была такая же проблема, пришел с этим простым решением. Он даже работает рекурсивным:

$(document).mouseup(function (e) 
{ 

var container = $("YOUR CONTAINER SELECTOR"); 

if (!container.is(e.target) // if the target of the click isn't the container... 
    && container.has(e.target).length === 0) // ... nor a descendant of the container 
{ 
    container.hide(); 
} 
}); 
-1

Вы также можете скрыть всплывающий щелчком на всплывающем div.For этого вы должны предоставить функцию щелчка в DIV tag.In этой функции мыши вы должны написать близко поп .

+0

Разве OP явно не заявлял, что это не было нужным решением? –

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