ďťż

[JS, jQuery] Problem z przejściem z JS na jQuery

       

Podstrony


telcocafe

Formularz wygląda następująco:

<form name="first" method="post"> <input name="source1" type="text" value="0" style="float: left; width: 62px;" /> <button type="button" onclick="buy(wm1, source1.name)" style="float: left; width: 70px;">BUY</button> </form>

gdzie funkcja buy w JS ma postać:
function buy(wm_selector, source_selector) { var gold = $('input[name=gold]').val(); var prize = wm_selector.prize; if(gold>=prize) { gold-=wm_selector.prize; $('input[name=gold]').val(gold); wm_selector.source++; alert($(this).source_selector); $('input[name='+source_selector+']').val(wm_selector.source); } else alert('Niestety nie posiadasz srodkow do zakupu tego surowca'); }

I teraz chodzi mi o to czy idzie to jakoś ładnie zapisać w jQuery w postaci eventu, typu
$(':button').click(function(...){});
Zastanawiam się jak tu podać parametry jeżeli chce stworzyć jeden event tego typu do kilku przycisków.

Próbowałem czegoś takiego, aby dostać obiekt, z którego chce pobrać dane:
$(':button').click(function() { var x = this.name; //var x = this.value; alert(x.prize); });

Ale niestety to tak nie zadziała. Ktoś ma jakiś pomysł jak to ugryźć?
Użytkownik kumi edytował ten post 20 kwiecień 2010, 20:58


Po prostu zostawiasz tak, jak jest albo robisz coś takiego:$(':button').click(function() { var gold = $('input[name=gold]').val(); var prize = wm1.prize; if(gold>=prize) { gold-=wm1.prize; $('input[name=gold]').val(gold); wm1.source++; alert($(this).source1.name); $('input[name='+source1.name+']').val(wm1.source); } else alert('Niestety nie posiadasz srodkow do zakupu tego surowca'); });Skoro wm1 i source1.name są zmiennymi, to można w ten sposób umieścić.

PS <button type="button"></button>? Atrybut type nie jest w tym przypadku potrzebny, bo to nie input.
Użytkownik andrzej_aa edytował ten post 21 kwiecień 2010, 15:47

Skoro wm1 i source1.name są zmiennymi, to można w ten sposób umieścić.
Tylko właśnie chodzi mi o to, że mam w skrypcie 3 obiekty wm1, wm2 i wm3 i teraz w zależności którego z 3 przycisków buy użyje to albo będę miał wm1.source wm1.prize albo wm2.source wm2.prize itd. i teraz chciałbym zrobić uniwersalny event do tych 3 przycisków buy i w zależności od tego, którego użyje otrzymam wm1.source/wm2.source/wm3.source . Próbowałem to właśnie zrobić tak aby nazwać przycisk albo nadać mu value, które będzie odpowiadało wm1/wm2/wm3,
$(':button').click(function() { var x = this.name; //var x = this.value; alert(x.prize); });ale to mi nie działa ponieważ to uzyskane name czy też value z przycisku właśnie nijak ma się do mojego obiektu, albo inaczej nie wskazuje na obiekt i pomimo że z alert(this.name) otrzymuje np. wm1 to już alert(this.name.prize) da mi undefined i szukam sposobu, dzięki któremu będę mógł mięć właśnie jeden event, który obsłuży mi te 3 przyciski buy, bo mógłbym zrobić nazwę przycisku i do każdego zrobić oddzielny event click(function() {}) i tak jak już podałeś całą funkcję tam wrzucić, ale właśnie szukam jakiegoś lepszego rozwiązania, dzięki któremu nie będę musiał kopiować tego samego 3-krotnie ze zmiana - wm1,wm2,wm3 ;)


PS <button type="button"></button>? Atrybut type nie jest w tym przypadku potrzebny, bo to nie input.
Ale bez atrybutu odświeżało mi stronę, a wtedy tego nie chciałem :Tongue:
Użytkownik kumi edytował ten post 20 kwiecień 2010, 22:29
W takim wypadku nie potrzebujesz takiego sposobu. Nie można wciskać wszystkiego na siłę do jQuery. jQuery ma pomagać, a nie komplikować - Ty właśnie sobie takim sposobem komplikujesz życie. Ale jeśli chcesz, to tag button może mieć atrybut name, którego nie wykorzystujesz. Możesz umieścić w nim identyfikator i później się odwoływać do niego $(this).attr('name').$(':button').click(function() { var wm_selector = window['wm' + $(this).attr('name')], source_selector = window['source' + $(this).attr('name')].name; var gold = $('input[name=gold]').val(); var prize = wm_selector.prize; if(gold>=prize) { gold-=wm_selector.prize; $('input[name=gold]').val(gold); wm_selector.source++; alert($(this).source_selector); $('input[name='+source_selector+']').val(wm_selector.source); } else alert('Niestety nie posiadasz srodkow do zakupu tego surowca'); });

Ale bez atrybutu odświeżało mi stronę, a wtedy tego nie chciałem Huh. Sądziłem, że tag button jest zamiennikiem <input type="button" />. Sprawdziłem i jednak nie. Twoja racja :-)



This is what i was looking for!!
Dzięki Andrzej :) masz plusika :Tongue:

Ostatecznie zrobiłem tak, że tag button name użyłem do selektora żeby reagował na wszystkie przyciski buy, a tag value jako wskazujący na konkretny objekt
$(':button[name=buy]').click(function() { var wm_selector = window['wm' + this.value]; var source = this.form.source.value; ...

Btw. Wykombinowałem jeszcze coś takiego, że stworzyłem tablicę objektów i tablicę inputów, a value z buttona wskazywało, o który objekt i input chodzi :biggrin:
Użytkownik kumi edytował ten post 22 kwiecień 2010, 09:59
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.