Das Problem ist, dass $('.masterTooltip').hover(...).mousemove(...)
Ereignishandler nur zu Elementen anfügt, die zu diesem Zeitpunkt vorhanden sind.
Sie könnten den gleichen .hover().mousemove()
Code in Ihrem click
Handler anwenden, aber ich denke, es ist einfacher, statt the delegated syntax for the .on()
method auf dem beigefügten delegierte Event-Handler die document
zu verwenden, vorbei an den '.masterTooltip'
Selektor als Argument, so dass, wenn das Ereignis jQuery auftritt, Testen Sie automatisch, ob das Ereignis auf ein Element angewendet wurde, das mit diesem Selektor übereinstimmt. Die grundlegende Syntax wäre:
$(document).on('mouseenter', '.masterTooltip', function() { ... })
... aber Sie wollen drei Event-Handler gegeben, mouseenter
, mouseleave
und mousemove
auf die gleichen Elemente anwenden Sie können pass an object to .on()
wie folgt:
$(document).on({
'mouseenter': function() {
// Hover over code
var title = $(this).attr('title');
$(this).data('tipText', title).removeAttr('title');
$('<p class="tooltip"></p>')
.text(title)
.appendTo('body')
.fadeIn('slow');
},
'mouseleave': function() {
// Hover out code
$(this).attr('title', $(this).data('tipText'));
$('.tooltip').remove();
},
'mousemove': function(e) {
var mousex = e.pageX + 20; //Get X coordinates
var mousey = e.pageY + 10; //Get Y coordinates
$('.tooltip')
.css({
top: mousey,
left: mousex
})
}
}, '.masterTooltip'); // NOTE the selector on this line
https://jsfiddle.net/c7dw8e28/1/
BEARBEITEN, PS Beachten Sie, dass die von Ihnen ursprünglich verwendete .hover()
-Methode eine bequeme Methode zum Hinzufügen von mouseenter
und mouseleave
Handlern ist, aber wenn Sie .on()
verwenden, müssen Sie mouseenter
und mouseleave
explizit definieren, wie ich gezeigt habe.