@BookerDeWitt

Как правильно реализовать закрытие всплывшего окна по клику вне этого окна?

Есть элемент крестик
<span onClick='closeSign()' class=close><i class='fa fa-times'></i></span>


по клику на который выполняется функция

function closeSign() {
              $("#delete_topic_question").css("visibility", "visible");
            }


и есть элемент который по умолчанию visibility:hidden

<div class=text-center id=delete_topic_question>
          <span id=delete_topic_question_text>Delete topic?</span>
          <div class=text-center id=delete_topic_question_buttons>
            <input onClick='deleteTopic()' id=but type=button class="btn btn-danger" value=Delete>
            <input onClick='noDelTopic()' id=no_del_btn type=button class="btn btn-primary" value=No>
          </div>
        </div>


После того как элемент стал видимым мне нужно сделать так чтобы кликнув вне этого элемента он снова становился невидимым, для этого написал следующий код:

$(document).click(function (e)
{
    var container = $("#delete_topic_question");
    if (!container.is(e.target) // 
        && container.has(e.target).length === 0 // 
        && container.css("visibility")==="visible"
        && $(e.target)!==$("span.close")) // если нажат крестик
    {
        container.css("visibility","hidden");
    }
});


Проблема: при нажатии на крестик ничего не происходит, скоре всего потому что при клике на него тригерятся сразу обе функции , то есть элемент появляется и исчезает сразу же. Как при клике по $(document) мне не учитывать нажатие на крестик отображающее элемент?

Если что без $(document).click() элемент нормально появляется на экране.
  • Вопрос задан
  • 459 просмотров
Пригласить эксперта
Ответы на вопрос 1
e_snegirev
@e_snegirev
Обрабатываем клик on('click', ...) по body или html:
если (таргет не является нужным_элементом
&& или таргет не является дочерним_элементом нужного_элемента
&& или таргет является кнопкой_закрытия)
{
...
нужный_элемент.hide()
...
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы