Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Blocurile goale! Orase in car...

Motorul pe benzina 1.0 SCe65

Mostenire In 1986

Lentile sferica pentru astigmatism
 Problema inlocuire usa spate A6 C...

Ce gen de muzica este?

Drepturile copiilor, in numele &#...

Mocheta peste parchet cu incalzir...
 La multi ani mie!

Senzor filtru particule GOLF 7

La multi ani @radu103!

La multi ani @Nenea Zap!
 La multi ani @beavis03!

BlackView Oscal Pad 13, probleme ...

Baterie auto AGM 70AH vs normala ...

Depanero nu vrea sa imi dea Negat...
 

problema jquery

- - - - -
  • Please log in to reply
30 replies to this topic

#19
shiva

shiva

    Nameless hero. Professional bug slayer mom.

  • Grup: Senior Members
  • Posts: 14,874
  • Înscris: 06.10.2003

View Posti0nutzb, on 9th March 2010, 18:57, said:

[...]
Totu?i, pe link po?i pune atât title cât ?i alt (parcă). Chiar nu î?i ajung astea două ?i TREBUIE să inventezi un atribut invalid ? :)

Nu ma incanta nici pe mine, ca nu e compliant da' asta e - asa e facut. De-asta vreau sa-i dau ca parametru selectorul sau o functie de selectie a datei respective.
Cred ca solutia cea mai potrivita ar fi o functie, ceva de genul:
(function($){  
$.fn.tooltip= function(options){  
	 o = jQuery.extend({
		 foo: 'defaultVal', // vei folosi codul în forma o.foo
		 params: function(){ return ['bubu'];}
	 }, options || {});
	 return this.each(function(){
		 var id = o.params;
		 //$(this).attr('aid') // care este jQuery("table#AuthTable tr td.l a")
	 })
}})(jQuery);
iar apelul sa fie ceva de genul:
jQuery("#element").tooltip({foo: 'io', params: function{return ['cucu']} });

Btw i0nutzb, care e opinia ta referitoare la obiecte javascript vs. pluginuri jQuery? Care sunt mai "usoare"? Care minimizeaza memory leak-urile? Evident, codatul cu picioarele iti provoaca aceleasi dureri de cap in ambele stiluri :lol:

L.E dupa o ora: VICTORY!
Soluta e, intradevar, folosirea unei functii care primeste un parametru, iar in interiorul pluginului, acel parametru va fi initializat cu elementul curent.

Edited by shiva, 09 March 2010 - 20:25.


#20
shiva

shiva

    Nameless hero. Professional bug slayer mom.

  • Grup: Senior Members
  • Posts: 14,874
  • Înscris: 06.10.2003
Mor cu jQuery de gat ...
Varianta stilizata a pluginului meu de tooltip:
(function($) {	
	$.fn.tooltip = function(options) {
		var settings = $.extend({
			text: ''
		}, options || {});

		return jQuery(this).bind('mouseover', function() {
			console.log('in mouseover -this: ' + this);
		}).bind('mouseout', function() {
			console.log('in mouseout-this: ' + this);
		});
	};
})(jQuery);

Pe pagina de test merge bine-mersi, frumos, de oricate ori. Pe pagina reala, nu se face bind-ul. De nici o culoare. Wtf? :wallbash:

#21
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,284
  • Înscris: 08.10.2015

Quote

Btw i0nutzb, care e opinia ta referitoare la obiecte javascript vs. pluginuri jQuery? Care sunt mai "usoare"? Care minimizeaza memory leak-urile? Evident, codatul cu picioarele iti provoaca aceleasi dureri de cap in ambele stiluri
Au scopuri diferite pentru a putea face o comparație :)

Oricum, la pluginurile jQuery eu merg de cele mai multe ori pe chestii custom (ex: tooltips, taburi, slidere, uneori chiar și lightbox clone) și pe pluginuri gata făcute pentru chestii maicomplexe sau ce trebuie să se încadreze într-un timp foarte restrâns și nu e vreme de pierdut cu teste (draggable/sortable, autocomplete etc).

Despre cea de-a doua problemă, că nu îți merge, trebuie să faci o iterație. Musai. Probabil în pagina de test ai un singur elemente iar pe pagina reală ai mai multe elemente și se cam încurcă.

În plus, dacă ai elemente adăugate dinamic (injectate în DOM după încărcarea paginii) poate că ar fi bine să folosești .live() sau .delegate()

#22
shiva

shiva

    Nameless hero. Professional bug slayer mom.

  • Grup: Senior Members
  • Posts: 14,874
  • Înscris: 06.10.2003
Mda, am gasit problema - aberam pe un input care era disabled :thumbdown: Acuma mai trebuie sa ma distrez cu pozitionarea tooltip-ului in fereastra.

Intrebarea mea JS objects vs jQuery plugins vine in contextul in care poti obtine acest tooltip fie printr-un plugin de jQuery (jQuery fiind libraria aleasa pt. site) sau printr-un obiect JS. Adica:
jQuery("#element").tooltip(bla-bla);
vs
var t = new Tooltip({selector: '#element', bla-bla});

Pluginul mi se pare mai clar, mai expresiv si mai scurt, vizual. Managementul memoriei mi se pare cam la fel in ambele cazuri.

#23
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Niște date empirice ar fi interesante...

#24
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,284
  • Înscris: 08.10.2015

View Postshiva, on 10th March 2010, 18:42, said:

Mda, am gasit problema - aberam pe un input care era disabled :thumbdown: Acuma mai trebuie sa ma distrez cu pozitionarea tooltip-ului in fereastra.

Intrebarea mea JS objects vs jQuery plugins vine in contextul in care poti obtine acest tooltip fie printr-un plugin de jQuery (jQuery fiind libraria aleasa pt. site) sau printr-un obiect JS. Adica:
jQuery("#element").tooltip(bla-bla);
vs
var t = new Tooltip({selector: '#element', bla-bla});

Pluginul mi se pare mai clar, mai expresiv si mai scurt, vizual. Managementul memoriei mi se pare cam la fel in ambele cazuri.

Ah, scuze, nu știam la ce te referi (și chiar nu vrei să știi la ce mă gândeam eu :w00t: )

Eu când am dubii de genul „cum e mai rapid” pornesc profiler-ul din firebug și analizez timpii de execuție și numărul de call-uri.

Despre poziționarea tooltip-ului îți dau un hint: $(this).offset().top și  $(this).offset().left :D

#25
shiva

shiva

    Nameless hero. Professional bug slayer mom.

  • Grup: Senior Members
  • Posts: 14,874
  • Înscris: 06.10.2003

View Posti0nutzb, on 10th March 2010, 22:45, said:

[...]Despre pozi?ionarea tooltip-ului î?i dau un hint: $(this).offset().top ?i  $(this).offset().left :D
Offset, offset da' pe IE nu returneaza corect pozitia. Cam asa ceva m-am jucat - pozitionare si rezolvare coliziune cu marginea dreapta:
var wwidth = (isIE ? $(window).width() : $.innerWidth);
				var wheight = (isIE ? $(window).height() : $.innerHeight);
				var poleft = (isIE ? this.parentElement.getBoundingClientRect().left : $(this).parent().offset().left);
				var potop = $(this).parent().offset().top;
				var toleft = (isIE ? this.getBoundingClientRect().left : $(this).offset().left);
				var totop = $(this).offset().top;
				if (settings.rightArrow ||
					$(window).scrollLeft() + $(window).width() < toleft + $(this).width + $('div.toolTip', $(this).parent()).width()) {
					$('div.tooltipA').remove();
					$('div.divH').after(skin.arrow);
					$('div.toolTip', $(this).parent())
						.css('left', toleft - $('div.toolTip', $(this).parent()).width() + 'px');
				}
				else if (!settings.rightArrow) {
					$('div.toolTip', $(this).parent()).css('left', toleft + $('div.toolTip', $(this).parent()).width() + 'px');
				}

Btw, mai e un gheism care se intampla: "jQuery(this).tooltip(bla-bla) is not a function". Pe un anumit flow, imi da eroarea asta si nu stiu de unde s-o apuc. Acelasi cod, pe restul flowurilor merge ok. :wacko:

Edited by shiva, 19 March 2010 - 12:46.


#26
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,284
  • Înscris: 08.10.2015
Tot nu înțeleg de ce te încăpățânezi să nu folosești un script gata făcut :D Măcar inspiră-te de la jTip ;)
Cât despre $(this), eu setez o variabilă chiar la început, în genul t=$(this), pentru a nu avea conflicte.

Ca fapt divers, vezi că variabilele le poți defini cu virgulă, să nu mai pui de fiecare dată var:
var foo = 1,
	  bar = 2,
	  baz =3;


#27
shiva

shiva

    Nameless hero. Professional bug slayer mom.

  • Grup: Senior Members
  • Posts: 14,874
  • Înscris: 06.10.2003

View Posti0nutzb, on 21st March 2010, 13:38, said:

Tot nu în?eleg de ce te încăpă?ânezi să nu folose?ti un script gata făcut :D Măcar inspiră-te de la jTip ;)[...]

1. learning
2. control

Eniuei, IE e prost rau de tot. Ii spun ca
var leftt = currPos.offx + currPos.w + settings.offsetLeft,
					rightt = wndPos.w - leftt,
					topt = 'auto';
$tooltip.css({ left: leftt, right: rightt, top: topt });
, left, right sunt calculate corect (masurate cu liniarul din IE Dev toolbar) da' tooltip-ul tot se afiseaza mult in dreapta. :death:

Evident, pe FF totul functioneaza brici.

ERATA:
---------
currPos = elementul parinte al tooltipului
wndPos = window
element.offx = element.offset().left
Firefox ia in considerare left-ul, IE ia right-ul.
element.w = element.width()

Edited by shiva, 30 March 2010 - 16:14.


#28
cezarica

cezarica

    Member

  • Grup: Members
  • Posts: 803
  • Înscris: 15.02.2004
@shiva : Încearcă de curiozitate cu 'live' în loc de 'bind' și zi și mie rezultatul.

#29
shiva

shiva

    Nameless hero. Professional bug slayer mom.

  • Grup: Senior Members
  • Posts: 14,874
  • Înscris: 06.10.2003

View Postcezarica, on 31st March 2010, 00:58, said:

@shiva : Încearcă de curiozitate cu 'live' în loc de 'bind' și zi și mie rezultatul.

De curiozitate sau de enhancement la pluginul meu?
Live-ul nu mi se potriveste in context, din pacate. Probabil mi-ar rezolva o problema cu postback-ul la UpdatePanel-ul din pagina dar ar trebui ca text-ul de afisat in tooltip sa fie returnat de o functie. Facubil rapid da' nu mai am chef.

La problema cu left-ul pe IE i-am dat de cap. CSS left inseamna stanga de la primul element parinte cu position:relative si apoi window, nu invers. Cel putin pe IE.

#30
cezarica

cezarica

    Member

  • Grup: Members
  • Posts: 803
  • Înscris: 15.02.2004
Ți-am zis de 'live' că am avut și eu un bind pe 'mouseover' și acuma funcționa și în secunda 2 pauză totală. Tu ai testat sau îmi zici o părere?

#31
shiva

shiva

    Nameless hero. Professional bug slayer mom.

  • Grup: Senior Members
  • Posts: 14,874
  • Înscris: 06.10.2003

View Postcezarica, on 31st March 2010, 21:20, said:

Ți-am zis de 'live' că am avut și eu un bind pe 'mouseover' și acuma funcționa și în secunda 2 pauză totală. Tu ai testat sau îmi zici o părere?

Da, mi-am spart si io capul cu asta. Solutia e sa faci un plugin corect cap-coada.
Pentru asta am citit capitolul interesant din jQuery in Action

Quote

Extending jQuery takes one of two forms:
■ Utility functions defined directly on $ (an alias for jQuery)
■ Methods to operate on a jQuery wrapped set (so-called jQuery commands)

Quote

If you’re familiar with object-oriented Javascript and its prototype-based
class declarations, you might be interested to know that $.fn is merely an
alias for the prototype property of the jQuery constructor function.

Structura de baza a unui plugin:
(function($){
$.fn.someNewMethod = function() {
	return this.each(function(){
	//
	// Function body goes here -- this refers to individual
	// elements
	//
	});
}
})(jQuery);

M-am jucat destul de mult cu declararea variabilelor in si in exteriorul functiei someNewMethod si atasarea de evenimente direct sau cu bind. Asa merge ok, de fiecare data. Orice alta varianta incercata a functionat doar o singura data.

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate