Всплывающее окно начальной загрузки Twitter скрывается сразу после показа

#javascript #jquery #twitter-bootstrap

#javascript #jquery #twitter-bootstrap

Вопрос:

Я пытаюсь использовать всплывающие окна начальной загрузки для отображения ошибок. Код работает хорошо только после первого нажатия на кнопку. При следующих щелчках всплывающее окно отображается, но сразу же исчезает.

Добавлен простой помощник для повторного использования всплывающих окон:

 var popoverHelper = function (selector) {
    var $element = $(selector);
    $element.popover({
        placement: "bottom",
        trigger: 'manual'
    });
    return {
        showPopover: function (text) {
            $element.attr('data-content', text);
            $element.popover('show');
        },
        hidePopover: function () {
            $element.popover('hide');
        },
        destroyPopover: function () {
            $element.popover('destroy');
        }
    };
};
  

Использование помощника:

 var pHelper = popoverHelper('#postInput');

$('#postButton').click(function (e) {
    e.preventDefault();
    // hide open popover if open
    pHelper.hidePopover();
    ...
    // some functionality
    ...
    // show popover if some errors  
    pHelper.showPopover('error occurs!!');
});
  

Используемый jQuery — 2.1.1, начальная загрузка Twitter — 3.1.1.

Полный образец в jsfiddle.

Небольшое примечание: если я вызываю popover destroy и если я повторно инициализирую всплывающее окно при показе, все работает хорошо. Но я думаю, что это не оптимально.

Пример Jsfiddle.

Комментарии:

1. Это то, что вы хотите jsfiddle.net/VX7As/2

2. Я не вижу причин скрывать всплывающее окно при событии щелчка, если оно уже показано.

3. Вместо того, чтобы скрывать его по щелчку, я думаю, вам следует скрыть в focus() ввода

4. Пользователь @shaunakde может нажать кнопку несколько раз, и могут отображаться разные ошибки. Например. поле ввода пустое, поэтому всплывающее окно с ошибкой будет показано. Пользователь заполняет поле ввода и снова нажимает кнопку, всплывающее окно с ошибкой должно исчезнуть, а всплывающее окно с успехом должно появиться.

Ответ №1:

Проверьте эту демонстрационную скрипку

Лучшим решением было бы скрыть всплывающее окно при действиях пользователя в поле ошибки.

 $('input').focus(function(){
     pHelper.hidePopover();
});