ďťż
Podstrony
|
telcocafeFormularz 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 |
|||
Sitedesign by AltusUmbrae. |