Witam, mam następujący problem: mam 3 radiobuttony (r1, r2, r3). Do każdego jest obserwator (observe_field o1, o2, o3). Obserwator o1 ma wywołać metodę m1, o2 metodę m2 i o3 metodę m3 jeżeli odpowiedni radiobutton zostanie zaznaczony.

Moje rozwiązanie działa połowicznie: domyślnie jest ustawiony r1. Gdy wybiorę r2 - wywoływana jest metoda m2, gdy wybiorę r3 - metoda m3, czyli na razie wszystko ok. Ale problemem jest to, że to nie działa wstecz, po wybraniu r3 próba wybrania r2 albo r1 nie wywołuje metody m2 i m1. Nie wiem w czym problem, może położenie obserwatorów względem radiobuttonów ma znaczenie? Moze potrzebna jest jeszcze jakaś operacja ktorej nie uwzględniłem?

Oto mój kod:

  1. <table cellpadding="0" cellspacing="0">
  2.            <tr><td><?php echo radiobutton_tag('produkt[]', 'strona', true) ?></td><td>strona firmowa</td></tr>
  3.            <?php echo observe_field('produkt_strona_strona', array(
  4.          'update'   => 'pozostale_kroki',
  5.          'url'      => 'formularz/formstrona',
  6.          )) ?>
  7.            
  8.            <tr><td><?php echo radiobutton_tag('produkt[]', 'portal', false) ?></td><td>portal internetowy</td></tr>
  9.            <?php echo observe_field('produkt_portal_portal', array(
  10.          'update'   => 'pozostale_kroki',
  11.          'url'      => 'formularz/formportal',
  12.          )) ?>
  13.          
  14.            <tr><td><?php echo radiobutton_tag('produkt[]', 'sklep', false) ?></td><td>sklep on-line</td></tr>
  15.            <?php echo observe_field('produkt_sklep_sklep', array(
  16.          'update'   => 'pozostale_kroki',
  17.          'url'      => 'formularz/formsklep',
  18.          )) ?>
  19.        </table>



Metody formsklep, formportal, formstrona renderują tylko tekst - dla uproszczenia.

Doprecyzowując zachowanie tego kodu: gdy wybiorę r2 - odpala m2, następnie r3 - odpala m3 i potem już nic się nie da odpalić. Natomiast odpalając od razu r3 odpala metodę m3 a wybranie r2 odpala m2 - więc nie do końca nie działa wstecz. Po prostu wszystko jest jednorazowe.

Rozwiązałem problem.

1. Jest to problem z prototype
2. Dotyczy właśnie radiobuttonów
3. Jedno z rozwiązań, które akuart ja zastosowałem polega na rezygnacji z observe_field i zastosowaniu zdarzenia onChange dla każdego z radiobuttonów
4. Kod wygląda tak:

  1. <tr><td><?php echo radiobutton_tag('produkt[]', 'strona', true, array('onChange' => 'onclick=new Ajax.Updater('pozostale_kroki' ,'formularz/formstrona'); return false;')) ?></td><td>strona firmowa</td></tr>
  2.  
  3. <tr><td><?php echo radiobutton_tag('produkt[]', 'portal', false, array('onChange' => 'onclick=new Ajax.Updater('pozostale_kroki' ,'formularz/formportal'); return false;')) ?></td><td>portal internetowy</td></tr>
  4.  
  5. <tr><td><?php echo radiobutton_tag('produkt[]', 'sklep', false, array('onChange' => 'onclick=new Ajax.Updater('pozostale_kroki' ,'formularz/formsklep'); return false;')) ?></td><td>sklep on-line</td></tr>


Keywords:
- observing + radiobutton
- radiobutton + observe_field
- prototype + radiobutton

Pozdrawiam