Как показать всплывающую подсказку по клику



Я пытаюсь использовать qtip2. Моя проблема заключается в том, что я хочу показывать всплывающую подсказку только тогда, когда пользователь нажимает href с указанным html внутри. Поэтому я пытаюсь сделать следующее:



function help(){
var link = document.getElementById('helps');
if(link.innerHTML=="Open"){
$('#helps').qtip({
content: {
text: 'I get shown on click'
},
show: {
event: 'click'
}
});
link.innerHTML = "Close";
}else{
link.innerHTML="Open";
}
}
<a href="javascript:help()" id="helps">Open</a>


Моя проблема в том, что когда я нажимаю, текст становится Close, но всплывающая подсказка не отображается. Когда я нажимаю снова, текст становится Open, и я вижу всплывающую подсказку. Что я могу сделать?

636   5  

5 ответов:

Вы должны инициализировать qtip перед обработчиком onclick.

$('#helps').qtip({
  content: {
    text: 'I get shown on click'
  },
  show: {
    event: 'click'
  }
});

function help() {
  var link = document.getElementById('helps');
  if (link.innerHTML == "Open") {
    link.innerHTML = "Close";
  } else {
    link.innerHTML = "Open";
  }
} 

< a href = "javascript:help()" id = "helps" > Open < /a>

Я бы сделал так:

Код JS:

$(function(){
    $('#helps').qtip({
        content: {
            text: 'I get shown on click'
        },
        show: {
            event: 'click'
        },
        hide: {
            event: 'click'
        }
    }).click(function() {
        var _$this = $(this);

        if(_$this.html() === 'Open') {
            _$this.html('Close');
        } else {
            _$this.html('Open');
        }
    })
});

HTML one:

<a href="javascript:void(0)" id="helps">Open</a>

EDIT: чтобы скрыть всплывающую подсказку на внешнем клике:

$(function(){           
    $(this).click(function(e) {
        var _$elm = $(e.target);
        if(_$elm.attr('id') !== 'helps') {
            $('#helps').qtip('hide');
        }               
        return false;
    });

    $('#helps').click(function() {
        var _$this = $(this);               
        if(_$this.html() === 'Open') {
            _$this.html('Close').qtip('enable');                                    
        } else {
            _$this.html('Open').qtip('disable').qtip('hide');                   
        }
    }).qtip({
        content: {
            text: 'I get shown on click'
        },
        show: {
            event: 'click',
            when: {
                target: $('#helps:contains("Open")')
            }
        },
        hide: {
            event: 'click',
            when: {
                target: $('#helps:contains("Close")')
            }
        }
    });
});

Вы должны сделать

$('#helps').qtip({
    content: {
        text: 'I get shown on click'
    },
    show: {
        event: 'click',
        target: $('#helps:contains("Open")')
    }
});

$('#helps').click(function() {
    if (this.innerHTML=="Open") {
        this.innerHTML = "Close";
    } else {
        this.innerHTML="Open";
    }
});

<a id="helps">Open</a>

Ваш код не работал, потому что вы создавали qTip с первого клика! Вы должны использовать опцию target qTip, чтобы подсказка отображалась только в том случае, если ваш элемент содержит текст "Open"

Или даже лучше, используйте jQuery для всех ваших сценариев JS:

$(function(){
   $('a.tooltip').qtip(
   {
      content: 'Some basic content for the tooltip!',
      api:{
              onShow: function(){
                  $('a.tooltip').html('Close');
              },
              onHide: function(){
                  $('a.tooltip').html('Open');
              }
      },
    show: {
      when: {
            event: "click"
      }
    }
   });
});

<a class='tooltip' href='#'>Click me!!</a>

Я думаю, что вы могли бы использовать:

$('#helps').Q совет({ содержание: { текст: "меня показывают по клику" });

- это лучший способ получить классическую подсказку..

Comments

    Ничего не найдено.