Скрыть загрузочный всплывающий элемент исключить целевой элемент

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

Я имею:

$('.vote').click(function() {
    $.post(ROOT + 'call', {call: 'Cake->vote'}, function(data) {
        $('.vote').attr('data-content', data.msg);
        if (!$('.popover').css('display'))
        {
            $('.vote').popover('show');
        }
    }, 'json')
})

И HTML:

<img class="vote" width="32" src="/images/down_red_empty.png" data-placement="right" data-content="" data-html="true">

И моя попытка скрыть это не работает:

$(document).click(function(e) {
    if ($('.popover').has(e.target).length == 0 && $(e.target).is('.vote') === false) {
        $('.vote').popover('hide');
    }
});

Похоже игнорирует $(e.target).is('.vote') === false полностью

1 ответ

Смотрите рабочий пример здесь: http://www.bootply.com/110602 (он использует setTimeout вместо $.post вызов).

Несколько проблем с кодом:

$('.vote').click должно быть на самом деле $(document,'.vote').click,

Поскольку вы вручную переключаете поповер, вы должны установить тег триггера данных в img быть data-trigger='manual', Это означает, что вы управляете тем, что происходит, когда вы щелкаете по элементу с помощью всплывающего окна, в противном случае щелчок будет отображать или скрывать всплывающее окно по умолчанию.

Наконец, вместо .is('.vote') ты должен использовать .hasClass('vote'), так как это класс CSS, который вы используете в качестве условия.

  $(document, '.vote').click(function() {
    $.post(ROOT + 'call', {call: 'Cake->vote'}, function(data) {
       $('.vote').attr('data-content', data.msg);
       if (!$('.popover').css('display'))
       {
           $('.vote').popover('show');
       }
    }, 'json')
  });

  $(document).click(function(e) { 
    if ($('.popover').has(e.target).length == 0 && !$(e.target).hasClass('vote')) {
        $('.vote').popover('hide');
    }
  });

и HTML:

<img class="vote" width="32" src="/images/down_red_empty.png" data-trigger="manual" data-placement="right" data-content="" data-html="true">
Другие вопросы по тегам