2013-07-24 2 views
0

У меня есть значок, который, если вы нажмете на него, появится popover с некоторыми данными, заполненными веб-сервисом. но проблема в том, что я хочу, чтобы popover появлялся всякий раз, когда я нажимаю на него, и исчезает всякий раз, когда я нажимаю в другом месте на странице!щелкните в любом месте страницы, и popover должен исчезнуть

Не могли бы вы сообщить мне, как я могу это сделать?

PS: Я уже опробовал триггер: «ручной», но это не сработало для моего примера!

Мой код здесь:

$('#myIcon').click(function (e) { 
    e.preventDefault(); 
    var $this = $(this); 
    $.ajax({ 
       type: "POST", 
       url: "myURL" 
      }).done(function (data) {           
       $this.popover({ 
        placement:'bottom',           
        content: function() { 
         html = "<table class='table table-bordered ' id='myTbl'><tbody id='myTblBody'>"; 
         for (var i = 0; i < data.length; i++) { 
          html = html + "<tr><td>" + data[i]['username'] + "</td></tr>"; 
         } 
         html = html + "</tbody></html>"; 
         return html; 
        }, 
        html: true, 
       }) 
      }); 
}); 
+0

Можете ли вы на самом деле прочитать свой собственный код? – Virus721

+1

@ Virus721 Это странно отступы, но не все так плохо. Если вы потратите время, чтобы рассмеяться об этом, почему бы вам не взять немного больше и предложить некоторые способы, в которых это может быть улучшено? –

+0

Наверное, потому, что я так же волнуюсь о вопросе, так как искатель заботится о времени и терпении, и это заставит нас его прочитать. – Virus721

ответ

1

Вы могли бы попробовать, если это работает для вас.

Когда вы показываете popover, добавьте одноразового клише для всего тела, которое скрывает popover.

$('#myIcon').click(function (e) { 
    e.preventDefault(); 
    var $this = $(this); 
    $.ajax({ 
       type: "POST", 
       url: "myURL" 
      }).done(function (data) {           
       $this.popover({ 
        placement:'bottom',           
        content: function() { 
         html = "<table class='table table-bordered ' id='myTbl'><tbody id='myTblBody'>"; 
         for (var i = 0; i < data.length; i++) { 
          html = html + "<tr><td>" + data[i]['username'] + "</td></tr>"; 
         } 
         html = html + "</tbody></html>"; 
         return html; 
        }, 
        html: true, 
       }); 
       $('body').one('click',function(ev){ 
        ev.preventDefault(); 
        $this.popover('hide'); 
       }); 
      }); 
}); 
+0

Красивый человек! Он отлично работает! Также, чтобы показать popover, мне нужно дважды щелкнуть значок (один для вызова ajax и один для popover, который я предполагаю), могу ли я изменить его таким образом, чтобы popover отображался одним щелчком мыши? –

+0

@ShimaMdz Я никогда не использовал popover, но вы можете попробовать $ this.popover ('show'); после вашего $ this.popover ({....}); – Andy

0

popover есть метод, как hideOnHTMLClick, который говорит Hide popovers when clicked outside of them.

$('#myIcon').click(function (e) { 
    e.preventDefault(); 
    var $this = $(this); 
    $.ajax({ 
       type: "POST", 
       url: "myURL" 
      }).done(function (data) {           
       $this.popover({ 
        placement:'bottom', 
        hideOnHTMLClick: true,           
        content: function() { 
         html = "<table class='table table-bordered ' id='myTbl'><tbody id='myTblBody'>"; 
         for (var i = 0; i < data.length; i++) { 
          html = html + "<tr><td>" + data[i]['username'] + "</td></tr>"; 
         } 
         html = html + "</tbody></html>"; 
         return html; 
        }, 
        html: true, 
       }) 
      }); 
}); 
+0

Это не работает для меня! –

+0

Также, чтобы показать popover, мне нужно дважды щелкнуть значок (один для вызова ajax и один для popover, который я предполагаю), могу ли я изменить его таким образом, чтобы popover отображался одним щелчком мыши? –

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