如何绑定在Jquery UI工具提示中动态生成的元素

时间:2015-08-29 22:47:59

标签: javascript jquery html ajax

我正在使用Jquery UI Tooltip Widget生成一个工具提示,该工具提示又发送一个AJAX请求以从服务器获取数据。我正在尝试使用Jquery .on()

绑定通过AJAX请求动态生成的元素

然而,它的工作时间只有一半。

我发现了一些类似的问题,但它们处理的Bootstrap工具提示完全不同。

HTML:

<ul id="carCatalogList">
   <li id="1">Car 1</li>
   <li id="2">Car 2</li>
   <li id="3">Car 3</li>
   <li id="4">Car 4</li>
   <li id="5">Car 5</li>
   <li id="6">Car 6</li>
</ul>

使用Javascript:

$('#carCatalogList li').tooltip({
items: 'li',
show: true,
content: function(callback) {
   $.post('fetchCar.php', {id: $(this).attr('id')}, function(data){
        callback(data);
   });
},
position: { my: "center bottom", at: "left-65 top" },
open: function(event, ui){

   if (typeof(event.originalEvent) === 'undefined')
   {
       return false;
   }

   var id = $(ui.tooltip).attr('id');

   $('div.ui-tooltip').not('#' + id).remove();

    $('.carStar').on('click', function(event){
      idVal = $(this).attr('data-car');
      hrefVal = 'carStar.php?id=' + idVal;
      $.post(hrefVal, {}, function(data){
        $('#' + id).fadeOut(function(){
          $(this).remove();
          $('#' + idVal).remove();
        });
      });
    });
},
close: function(event, ui)
{
    ui.tooltip.hover(function()
    {
        $(this).stop(true).fadeTo(400, 1); 
    },
    function()
    {
        $(this).fadeOut('400', function()
        {
            $(this).remove();
        });
    });
}
});

1 个答案:

答案 0 :(得分:0)

您可以在动态添加项目后重新初始化工具提示插件。

hold on

调用一次进行初始化以及动态追加任何元素

 var tooltipOptions = {
        items: 'li',
        show: true,
        content: function(callback) {
           $.post('fetchCar.php', {id: $(this).attr('id')}, function(data){
                callback(data);
           });
        },
        position: { my: "center bottom", at: "left-65 top" },
        open: function(event, ui){

           if (typeof(event.originalEvent) === 'undefined')
           {
               return false;
           }

           var id = $(ui.tooltip).attr('id');

           $('div.ui-tooltip').not('#' + id).remove();

            $('.carStar').on('click', function(event){
              idVal = $(this).attr('data-car');
              hrefVal = 'carStar.php?id=' + idVal;
              $.post(hrefVal, {}, function(data){
                $('#' + id).fadeOut(function(){
                  $(this).remove();
                  $('#' + idVal).remove();
                });
              });
            });
        },
        close: function(event, ui)
        {
            ui.tooltip.hover(function()
            {
                $(this).stop(true).fadeTo(400, 1); 
            },
            function()
            {
                $(this).fadeOut('400', function()
                {
                    $(this).remove();
                });
            });
         }
        };