2013-06-20 2 views
0

У меня есть страница, на которой есть некоторые DIV. Я хочу показать qTip2 всякий раз, когда нажимается DIV. Из-за каких-то других вещей, которые я делаю с qTip, я бы хотел повторить одно и то же снова и снова, если это возможно.Плагин JQuery qTip2 - Click-to-show работает только с первым элементом в первый раз

Итак, я использовал демонстрацию qTip2 в качестве отправной точки, и насколько я могу судить, я точно ее продублировал. Вот и проблема: он показывает только qtip для первого элемента, который был нажат - в первый раз. Он будет отображаться на всех других элементах столько раз, сколько вы хотите щелкнуть по ним, а первый - только в первый раз.

Неужели кто-нибудь подбегает к этому и имеет средство?

Вот код для примера приложения я создал, что вы столкнулись с проблемой:

CSS:

#Container { border: 1px solid black; } 
#Container > DIV { float: left; border: 2px outset silver; margin: 5px; } 
#Container > DIV:nth-last-child(1) { float: none; border: none; height: 1px; overflow: hidden; margin: -1px 0 0 0;} 

JavaScript:

var Container; 
var ContainerEndItem; 
$(document).ready(function() { 
Container = $('#Container'); 
if(Container.length == 0){ 
    alert("Container not found!"); 
    return; 
} 

var addLinks = $('.TipTarget'); 
$('<div>Test</div>').qtip({ 
      content : 'Test', 
      position: { 
       target: 'mouse', // Use the triggering element as the positioning target 
       adjust: { mouse: false, method: 'flip' }, 
       my: 'left center', 
       at: 'right center', 
       effect: true // Enable default 'slide' positioning animation 
      }, 
      show: { 
       target: addLinks, 
       event: 'click', 
       delay: 0 
      }, 
      hide: { 
       event: 'none' 
      }, 
      events: { 
       show: function (event, api) { 
        // Update the content of the tooltip on each show 
        var target = $(event.originalEvent.target); 

        if(target.length) { 
         api.set('content.text', 'Looking at: ' + target.text()); 
        } 
       } 
      } 
     }); 
}); 

HTML:

<div id="Container"> 
    <div id="Apples" class="TipTarget">Apples</div> 
    <div id="Watermelons" class="TipTarget">Watermelons</div> 
    <div id="Peaches" class="TipTarget">Peaches</div> 
    <div id="Meat" class="TipTarget">Meat</div> 
    <div id="Clear" style="clear: both">&nbsp;</div> 
</div> 

JQuery : 1,8,3

qTip2: 2.0.1

Вот jsFiddle с точной настройки: http://jsfiddle.net/Dracorat/Z3WqC/

Обратите внимание, что если вы начинаете, нажав Apple, затем Арбузы, затем персики, затем яблоки, затем Арбузы, затем Персики , и продолжайте повторять, что Apple покажет отзыв в первый раз. Остальные покажут это, пока корова не вернутся домой.

Обратите внимание, что если вы обновите и начнете с Арбуза, он будет показывать только первый раз, но все остальное будет отображаться каждый раз.

Что я сделал не так?

(А я уже пробовал использовать «каждый» конструкт - это не изменило поведение вообще)

Спасибо!

+1

Еще одна причуда, которую я нашел, если вы это сделаете: 'adjust: {mouse: true, method: 'flip'},' отлично работает – stackErr

+1

Не знаю почему, но кажется, что первый объект, который будет показан, имеет свой событие удалено (не всегда - если вы установите show 'event: 'mousemove'', похоже, что он работает). Он также работает с любым событием, если вы запускаете событие hide после первого показа: например. http://jsfiddle.net/Z3WqC/4/ – xjedam

+0

Я буду смотреть на утечку памяти (и, возможно, исправить ее сам, если смогу). Что касается двух других комментариев, я не могу закрыть всплывающую подсказку самостоятельно или перемещаться на основе мыши, потому что контент, который я фактически использую во всплывающей подсказке, представляет собой форму с элементами формы, которая обновляет себя, основываясь на том, как пользователь использует эту страницу. (Вот почему я использую ту же подсказку для нескольких мест.) – Dracorat

ответ

1

Только что я нашел при редактировании кода. Если вы измените свой код на это:

adjust: { mouse: true, method: 'flip' }, 

Наконечник инструмента отлично работает.

+0

Как уже указывалось, получается, что если у вас есть три следующие вещи: «target:« mouse »,« adjust: {mouse: false} »и не скрывать событие или событие« none »hide, тогда qTip2 добавляет пользовательское событие hide, которое помещает первое событие show. Я смог решить проблему, изменив цель на «событие». Ответ stackErr указал мне в правильном направлении, поэтому я принимаю это! Благодаря! – Dracorat

+0

@ Dracorat спасибо, но вы сделали большую часть работы. – stackErr

+0

Тем не менее, вы указали мне правильное направление. Кроме того, вы не можете «вернуть» щедрость, чтобы я мог ее наградить! – Dracorat