简体   繁体   English

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

[英]How to bind elements generated dynamically within a Jquery UI tooltip

I am using Jquery UI Tooltip Widget to generate a tooltip which in turn sends an AJAX request to fetch data from the server. 我正在使用Jquery UI工具提示小部件生成工具提示,该工具提示又发送AJAX请求以从服务器获取数据。 I am trying to bind an element generated dynamically through the AJAX request using Jquery .on() 我正在尝试使用Jquery .on()绑定通过AJAX请求动态生成的元素。

However, it works only half the time. 但是,它只能工作一半时间。

I have found some similar questions but they deal with Bootstrap tooltip which is completely different. 我发现了一些类似的问题,但是它们处理的Bootstrap工具提示完全不同。

HTML: 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: 使用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();
        });
    });
}
});

You can reinitialize tooltip plugin after dynamically added items. 您可以在动态添加项目后重新初始化工具提示插件。

 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();
                });
            });
         }
        };

Call this once for initialization and when you append any element dynamically 一次调用此方法进行初始化,并在动态添加任何元素时调用

 $('#carCatalogList li').tooltip(tooltipOptions);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM