|
You last visited: Today at 21:48
Advertisement
jQuery UI Tooltip Problem
Discussion on jQuery UI Tooltip Problem within the Web Development forum part of the Coders Den category.
09/27/2013, 03:19
|
#1
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
jQuery UI Tooltip Problem
So ich habe eine Script-Design Problem und habe zu wenig erfahrung in JS ums zu lösen.
Also ich habe einen Ajax Chat auf meiner Seite und will beim Hover über den User Informationen in einem Tooltip anzeigen, das ganze über den jQuery UI Tooltip. Das zu habe ein ein kleines System geschrieben was die informationen über jQuery lädt wenn diese noch nicht vorhanden sind und dann anschließend bereithält, das funktioniert auch soweit.
Nun habe ich aber das Problem das der Code den ich mir dazu gebastelt habe nach einer gewissen Zeit nicht mehr funktioniert. dh. manchmal wird der Tooltip nach 5mal hover nicht mehr anzeigt anderes mal nach 20mal etc. Das ganze ohne Fehler.
Das einzige was ich zu diesem Verhalten gefunden habe ist dieses aber die dortige Lösung ist bei unangebracht:
So mein Ansatz war das vllt das Problem sein könnte das jedesmal ein neuer Tooltip erstellt wird, da bin ich mir aber nicht sicher weil ich mich mit der materie zu wenig auskenne.
Also deswegen die Frage, hat da jemand ne idee wie ich das ganze umdesignen kann damit das zuverlässig funktioniert?
Hier noch mein Code
Code:
$(function () {
$('a[href*="profile.php"]').hover(
function() {
//Abfrage ob die infos über diese id schon vorhanden sind wenn ja zurückgeben wenn nein per ajax laden und zurückgeben
var ret = profBase.request($(this).attr("href").split("id=")[1]);
if (typeof ret == "object") {
$(this).tooltip({content: "name: " + ret.name + " id: " + ret.id + "<img id=\"theImg\" src=\"/img/51f3c5af635b3_tn.jpg\" />"});
}else{
$(this).tooltip({content: "failed"});
}
},
function() {
$(this).tooltip( "close" );
}
);
});
Über jegliche antworten, anregungen, links etc freu ich mich weil mir echt die ideen ausgehen bin auch über skype erreichbar, rechts auf das icon ding klicken.
Schonmal danke im vorraus
MfG
tolio
|
|
|
09/27/2013, 14:11
|
#2
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
An sich erstellst du solche Tooltips nicht in nem Hover-Handler, du verwendest jQuery UI ja gerade, um dir solche Details abzunehmen.
Ich hab dir mal eben ein Beispiel erstellt:
Dort wird der Tooltip-Inhalt asynchron geladen und gecached, wobei ich hier zu demonstrationszwecken window.setTimeout() verwendet habe.
Ich weiß nicht genau, was du dort in Sachen Tooltips geplant hast, aber wenn es richtig komplex werden soll, würde ich dir raten, dir mal  anzuschauen - es handelt sich dabei um ein zusätzliches jQuery Plugin für Tooltips, wobei du dort noch weitaus mehr Möglichkeiten hast, als das bei den standard Tooltips mit jQuery UI der Fall ist. Das Plugin unterstützt darüber hinaus jQuery UI Themes, ist also durchaus auch zur Verwendung mit jQuery UI vorgesehen.
|
|
|
09/27/2013, 15:21
|
#3
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
Ah nice danke, über den items selector das zu machen war genau der Zwischenschritt der noch gefehlt hat. Und natürlich hab ich auch nicht dran gedacht das caching mit nem key array zu machen. Also nochmal danke für das Bsp, ich würd ja mehrmals auf Thanks drücken wenns gehen würde
|
|
|
09/27/2013, 15:52
|
#4
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
Wobei du das mit dem Caching auch anders lösen könntest, z.B. via jQuery.data() - im Endeffekt brauchst du nur eine Brücke zwischen dem Element, das den Tooltip erhalten soll und den anzuzeigenden Daten. Ich hatte das im Beispiel nun nur so gewählt, weil ich mir nicht sicher war, was deine request-Methode genau macht - sah für mich so ein bisschen nach einem synchronen AJAX-Request aus und das solltest du nach Möglichkeit immer vermeiden, zumal es in diesem Fall auch absolut nicht notwendig ist.
|
|
|
09/27/2013, 16:25
|
#5
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
Ich nutze jQuery.ajax() das sollte eigendlich async sein.
folgendes habe ich mir zusammengebastelt: 
Hoffentlich bekommste davon kein Augenkrebs, bin der totale js noob ^^
|
|
|
09/28/2013, 12:37
|
#6
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
Du setzt es dort allerdings so ein, als wäre der Aufruf synchron, was allerdings nicht der Fall ist. Für den Fall, dass du die Daten nicht von einem älteren Aufruf gecached hast (wobei ich dein Caching Konzept etwas umständlich finde), gibt deine request-Methode nämlich undefined zurück- in dem Fall würde angezeigt, dass ein Fehler aufgetreten ist, was aber sehr wahrscheinlich gar nicht der Fall ist. Das wirkt so ein bisschen unbeholfen, hier solltest du das ganze besser sauber asynchron lösen, sprich mit callback-Funktionen arbeiten. Du musst einplanen, dass Daten nicht unmittelbar zur Verfügung stehen, sondern erst nach einer gewissen Zeit x. Man deutet das gerne durch das anzeigen irgendwelcher kleinen Ladebildchen à la

an - nachdem der Inhalt dann verfügbar ist, werden jene schlichtweg durch diesen ersetzt.
Noch ein paar generelle Anmerkungen: - Einen JSON-String mit eval() zu verarzten ist extrem unsauber - entweder du machst es selbst sauber, indem du JSON.parse() auf den JSON-String anwendest, oder aber du lässt es einfach direkt von jQuery erledigen, indem du die dataType Option beim Aufruf der ajax-Methode auf 'json' setzt - so erhältst du im zugehörigen callback direkt ein Objekt.
- Verwende statt new Date().getTime() lieber die statische Methode Date.now().
- jQuery hat eine ziemlich nützliche Methode namens jQuery.each(), womit du recht bequem über alle aufzählbaren Member eines Objekts oder Arrays iterieren kannst, wobei für jedes Element eine callback-Funktion aufgerufen wird:
Code:
var someObject = {
prop1: 42,
prop2: 43
};
$.each(someObject, function(key, val)
{
// Do somethin... (this == val == someObject[key])
});
Solltest du dir vielleicht mal anschauen, finde ich persönlich extrem bequem. Du musst dabei eigentlich nur beachten, dass this in der callback-Funktion immer auf das jeweilige Element zeigt (wenn du also this aus der übergeordneten Funktion brauchst, musst du dir eine closure-Variable anlegen).
|
|
|
09/29/2013, 02:12
|
#7
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
^das nehme ich mir natürlich auch zu Herzen jedoch habe ich jetzt schon wieder ein Problem und zwar den tooltip code so zu verändern wie es in deinem Beispiel war.
Es scheint als würde entweder der document oder der items selector nicht zu klappen. denn selbst wenn ich deinen code komplett übernehme passiert einfach gar nichts. Es gibt auch weder beim laden noch beim eigendlichen hover nen Fehler. Sehr merkwürdig weil bei jsfiddle klappts ja. Ich habe mal den document selector geändert, also direkt die betreffenden elemente rein gemacht und dann beim tooltip den items parameter weggelassen. Dann löst es zwar aus, aber ich bekomme mit $(this) das parent div und nicht den eigendlichen link.
Jetzt bin ich sehr verwirrt und ratlos...
|
|
|
09/29/2013, 17:12
|
#8
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
Hast du dazu ein möglichst vollständiges Codebeispiel? Dann würde ich es mir bei Gelegenheit mal anschauen.
|
|
|
10/01/2013, 00:57
|
#9
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
oh man ich hatte in den sonst quasi leeren html dokument noch nen (document).tooltip drin und das hats dann natürlich überschrieben weils unter den verweisen zu den js dateien steht, das passiert wenn man an projekten weitermacht die ewig alt sind ^^
naja danke für deine hilfe soweit wenns nochmal was gibt pushe ich hier wenns dazu passt
|
|
|
 |
Similar Threads
|
jQuery Get Problem
08/03/2013 - Web Development - 5 Replies
Hallo,
ich versuche mich an einer $.get anfrage:
<script type="text/javascript">
function updateRes(){
$.get('ajaxapi.php', {action: 'getRessources', userid: '19' },
function(data) {
$('#money').html(data.money);
$('#steel').html(data.steel);
|
jQuery Problem?!
09/08/2012 - Web Development - 4 Replies
Hallo,
also ich möchte nun ein bisschen jQuery ausprobieren.
Mit Firebug funktioniert alles hervorragend. Nun möchte ich das
in eine .js Datei schreiben. Bloss es wird nicht ausgeführt.
Erstmal habe ich jQuery richtig eingebunden:
<script src="http://code.jquery.com/jquery-1.8.1.min. js"></script>
Und die .js Datei habe ich folgend eingefügt:
|
JQuery Problem
04/19/2012 - Web Development - 4 Replies
Moin,
also es geht primär um dieses Beispiel:
$("#arrow-top").wrap('<a href="#" onclick="getMap(\'Top\');"></a> ');
Wenns ichs am PC teste (mit XAMPP) funktioniert es einwandfrei. Wenn ich es aber aufn Server lade, gehts nicht mehr, also er wrap'ed das Bild nicht mehr.
Alles andere funktioniert sonst einwandfrei, nur eben das nicht.
|
jquery Problem
04/17/2012 - Web Development - 2 Replies
Hey Leute!
Ich bin gerade dabei mir eine kleine Slideshow mittels Jquery zu basteln und nach tausenden versuchen scheint es einfach nicht zu funktionieren.
Hoffe ihr könnt mir helfen :)
$(document).ready(function() {
$("#slide1").hover(
function () {
|
ToolTip problem
04/02/2010 - AutoIt - 4 Replies
Hallo,
Ja habe ein Problem bei AutoIT, hier mal ein ausschnitt des Codes:
Man kann erkennen das er den Tooltip starten soll, wenn der Prozess nicht existiert und ihn beenden soll, wenn der Prozess existiert.
Mein Problem ist aber, dass er ihn einfach nicht beendet, er bleibt einfach da... hab schon verschiedenste zusammenstellungen probiert aber nichts hat funktioniert <.< Weis einer weiter?^^ (Insgesamt funzt alles über GUI)
|
All times are GMT +1. The time now is 21:49.
|
|