Postanowiłem nauczyć się pisać własne pluginy do jQuery, na początek wymyśliłem tooltip. Jednak przystanąłem na pewnym problemie, szukam i szukam i nie mogę trafić na rozwiązanie.
Firebug zgłasza błąd: F is undefined jquery-1.3.2.min.js (wiersz 19)
Próbowałem już w różnej kolejności, ciągle jest coś nie tak. W necie są tutki jak pisać pluginy, tyle, że takie proste, z jedną funkcją.
<?php <script type="text/javascript"> /** * Copyright (c) 2008 Vokiel vokiel.com * @name Vtip VokielToolTip * @author Vokiel * Licensed under the MIT: * <a href=\"http://www.opensource.org/licenses/mit-license.php\" target=\"_blank\">http://www.opensource.org/licenses/mit-license.php</a> */ ;(function($){ /** * Vtip */ $.fn.Vtip = function(options){ /** * Ustawienia domyślne */ var defaults = { moving: true, tipclass: 'jquery_tooltip_show_2', usetipclass: false, container: '.container', tipL: 10, tipT: 20, css: { 'display': 'block', 'position': 'absolute', 'width': '250px', 'border': '1px solid #09547B', 'background-color': '#B6DBED', 'color': '#000', 'text-align': 'left', 'padding': '5px', 'font-weight': 'normal' } }; // rozszerzenie domyslnych ustawien defaults = $.extend(true, {}, defaults, options); // iteracja po wszystkich pasujących elementach var $this = $(this); $this.livequery(function(){ var span = $('<span />').attr('class',defaults.tipclass); if (defaults.usetipclass==false){span.css(defaults.css);} $this.after(span.html($this.attr('title')).hide()).attr('title', ''); }).live('mouseover',ShowTooltip($this,e)) .live('mouseout', HideTooltip($this)) .live('mousemove',MoveTooltip($this,e)); }); /** * Pokazanie tooltipa */ function ShowTooltip($this,e){ dim = DimentionsTooltip(e); text.css({top:dim['t'],left:dim['l'],opacity: 0.9}).fadeIn(); } /** * Ukrycie tooltipa */ function HideTooltip($this){ text.fadeOut('fast'); } /** * Przesuwanie tooltipa wraz z ruchem myszki */ function MoveTooltip($this,e){ dim = DimentionsTooltip(e); } /** * Wyliczenie nowej pozycji tooltipa */ function DimentionsTooltip(e){ var wW = $(window).width(); if (leftT+250>wW) leftT = (wW-250); dim['l'] = leftT+ 'px'; dim['t'] = topT+ 'px'; return dim; } }; })(jQuery); $(document).ready(function(){ $('.jquery_tooltip_2').Vtip(); }); </script> <a class="jquery_tooltip_2" title="<table border='0'><tr><td class='gropup bb'> </td><td class='bb'><strong>login</strong></td></tr></table>">test</a> <a class="jquery_tooltip_2" title="<table border='0'><tr><td class='gropup bb'> </td><td class='bb'><strong>login</strong></td></tr></table>">test</a> ?>
Już sam nie wiem jaki powinien być wzrór pluginu, spotkałem się z wieloma różnymi, np:
<?php <script type="text/javascript"> ;(function($){ $.fn.Vtip = function(options){ var defaults = {}; defaults = $.extend(true, {}, defaults, options); var $this = $(this); // kod }); // metody prywatne function ShowTooltip(){} function HideTooltip(){} }; // metody publiczne $.fn.Vtip.prywatna = function() {}; })(jQuery); /** Albo tak: */ (function($){ $.fn.extend({ Vtip: function() { return $(); // gdzie umieścić metody? tutaj prywatna: function(){} } }); })(jQuery); /** Inny sposób */ (function($) { $.fn.Vtip = function(o) { }; $.extend(Vtip.prototype, { functionA : function() {}, functionB : function() {} } })(jQuery); /** Jeszcze dwa */ (function($) { $.fn.Vtip = function(o) { // metoda prywatna var functionA = function () {} }); }; })(jQuery); (function($) { $.fn.Vtip = function(o) { }; $.fn.extend ({ functionA : function () {} }); })(jQuery); </script> ?>
Poza tym czasem jest średni na początku przed ;(function($) { czasem go nie ma.
I jeszcze jedno na konieć, jak mam przekazać parametr event? Czy po prostu przez function(e) a następnie wywołanie
DimentionsTooltip(e)?
Może jest ktoś bardziej doświadczony ode mnie w tym temacie i ma sprawdzony, działający sposób?
Pozdrawiam