Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JQuery] tworzenie wtyczki, nie działa tak jak powinna
Forum PHP.pl > Forum > Po stronie przeglądarki
scalar
Stworzyłem wtyczkę którą zastosowałem dla wszystkich $('input') pól input w dokumencie. Wtyczka ma za zadanie sformatowanie pola input i dodanie po obu stronach przyciski dodaj i usuń zwiększające i zmniejszające wartość tego pola. W pierwszej fazie działa prawidłowo, formatuje wszystkie pola, dodaje przyciski, które nawet działają. jednak kliknięcie któregokolwiek z nich powoduje zmianę wartości we wszystkich polach. Zależy mi na zastosowaniu tego pluginu w sposób "hurtowy", ponieważ będzie on zastosowany w tabeli która będzie się dynamicznie zmieniała.

  1. jQuery.fn.td_amountsof = function(options)
  2. {
  3. var defaults = { min: 0,
  4. max: 999,
  5. maxlen: 3,
  6. };
  7.  
  8. // rozszerzenie domyślnej konfiguracji
  9. var options = $.extend(defaults, options);
  10.  
  11. var $this = $(this);
  12.  
  13. if(!$this.val()) $this.val(0);
  14.  
  15. $this.attr('maxlength',options.maxlen);
  16. $this.css({'width':options.maxlen*10,
  17. 'text-align': 'center'});
  18.  
  19. $this.before('<A>a</A>');
  20. $this.prev().empty().wrapInner('<DIV>minus</DIV>');
  21.  
  22.  
  23. $this.after('<A>a</A>');
  24. $this.next().empty().wrapInner('<DIV>plus</DIV>');
  25.  
  26. $this.prev().click(function()
  27. {
  28. if(options.min < parseInt($this.val())) $this.val(parseInt($this.val())-1);
  29. }
  30. );
  31. $this.next().click(function()
  32. {
  33. if(options.max > parseInt($this.val())) $this.val(parseInt($this.val())+1);
  34. }
  35. );
  36. };
  37.  
  38. $("input").td_amountsof();
  39.  
  40.  
  41. <INPUT Type="text" id="1">
  42. <INPUT Type="text" id="2">
  43. <INPUT Type="text" id="3">
  44. <INPUT Type="text" id="4">
  45. <INPUT Type="text" id="5">
  46. <INPUT Type="text" id="6">
  47. <INPUT Type="text" id="7">
  48. <INPUT Type="text" id="8">
  49. </BODY>


proszę o sugestie.

zauważyłem że plugin wykonuje się tylko raz dla pierwszego elementu, ale stosuje dla wszystkich, sprawdziłem to wstawiając alert($this).attr('id') - zwracało tylko raz "1". Myślałem że wykona się tyle razy ile jest inputów, przyznaję że nie rozumiem tego mechanizmu.
toffiak
Nie iterujesz po każdym elemencie z osobna
http://docs.jquery.com/Plugins/Authoring
http://addictedtonew.com/archives/414/crea...n-from-scratch/
scalar
dziękuję, taka mała rzecz a cieszy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.