Irvin Dominin è stato un grande aiuto per me su questo. Ho ampliato su di esso se qualcuno ha lo stesso requisito aggiuntivo che ho avuto.
Volevo anche mettere un ritardo sul display del tooltip. Poiché l'opzione "mostra" era impostata su null, avevo bisogno di replicarla. (l'opzione show è impostata su null per fermare il popup visibilmente ridisegnato quando il mouse passa dal tooltip al link di chiamata).
Avevo bisogno di mettere un ritardo, dal momento che una pagina che stavo sviluppando aveva un sacco di tooltip utente, e la visualizzazione istantanea era un po 'stonata quando passava il mouse sulla pagina.
La mia soluzione era utilizzare l'evento open per nascondere la descrizione e aggiungere un timeout prima di visualizzarla di nuovo. L'eccezione era che se lo stesso suggerimento fosse già aperto, e per ordinarlo ho aggiunto un attributo di dati vero/falso a ciascun elemento quando lo si apriva/chiudeva (ottenere l'elemento sorgente dalle funzioni di apertura e chiusura non era facile, ma Penso sia giusto).
Disclaimer: Non sono un maestro di JQuery e potrebbe esserci un modo molto più semplice per replicare questo. Vengo bloccato giù coniglio-fori con codice a volte, in modo che il codice qui sotto potrebbe essere un cattivo consiglio ...
var ttWait; // global variable for tooltip delay
$(document).tooltip({
items: '.userSummaryLink',
show: null,
content: function() { // build the popup content
return $(this).prop('title');
},
open: function (event, ui) { // simulating the show option (that needs to be null to stop the popup closing and reopening when user mouses from popup back to source
var el = $(event.originalEvent.target);
if(!el.data('tooltip')) { // only put open delay if SAME popup not already open
ui.tooltip.hide(); // stop popup opening immediately
ttWait = setTimeout(function() { // show popup after delay
el.data("tooltip", true); // acknowledge popup open
ui.tooltip.fadeIn("400");
}, 250);
}
},
close: function (event, ui) {
var el = $(event.originalEvent.target);
el.data("tooltip", false); // acknowledge popup closed (might be over-ridden below)
clearTimeout(ttWait); // stop tooltip delay function
ui.tooltip.hover(
function() {
$(this).stop(true).fadeTo(400, 1);
el.data("tooltip", true); // acknowledge popup still open
},
function() {
$(this).fadeOut("400", function() {
$(this).remove();
});
});
}
});
Si noti che ho anche aggiunto alcune classi e il posizionamento ai miei popup per mettere una freccia per il collegamento di chiamata. Inoltre il mio contenuto derivava da un file oggetto utente caricato sulla pagina. Ho rimosso questi per renderlo più facile da usare.
Puoi fornire una demo del problema su jsfiddle? –
Ho aggiornato la domanda e aggiunto un esempio in jsfiddle. – Nir
http://stackoverflow.com/questions/16660576/only-close-tooltip-if-mouse-is-not-over-target-or-oltioltip – apaul