Forms in ajax components and non-ajax components with ajax_trap=True are 
submitted via ajax, and the form variables are serialized via the jQuery 
.serialize() method. As explained here (http://api.jquery.com/serialize/), 
the .serialize() method doesn't know what triggered the form submission, so 
it cannot include the values of any submit buttons. For now, here is one 
possible workaround using a hidden field: 
http://forum.jquery.com/topic/submit-event-serialize-and-submit-buttons-get-the-button-name.
 
Perhaps we can come up with a more general solution.
 
Anthony

On Wednesday, August 3, 2011 11:46:09 PM UTC-4, G wrote:

> Hello, 
> I am trying to make a simple component which has a form that contains 
> just buttons. It seems to work OK when I use LOAD(... ajax=False) and 
> have only one component on my page. However, I'd like to have multiple 
> components on one page. When I tried that, still with ajax=False, 
> everything looks OK, but the form doesn't do anything (that is, the 
> action that's supposed to happen when a button is pushed never 
> happens). Similarly, if I set ajax=True, the same problem occurs (no 
> action). 
> I then tried setting ajax_trap = True after which when I click a 
> button in the component, the component disappears and the text 
> "invalid request" appears. I found this very difficult to debug, but 
> finally by putting a print statement in the rewrites.py file I found 
> that the path that was trying to be accessed looks as follows, from 
> which it's why it is an invalid request: 
>
> /devel/default/(<gluon.html.XML object at 0x14721510>,) 
>
> What is the correct way to have multiple components with simple 
> customized forms on a single page? 
>
> The simple component I am using has the following function which uses 
> the generic.load: 
>
> def inits(): 
>     obs = _getObs() 
>     form = FORM(TABLE(TR(TD(TAG.BUTTON("Reset 
> Receiver",_type="submit",_name="initRSS", _value="yes")), 
>         TD(TAG.BUTTON("Reset DSP",_type="submit",_name="initDSP", 
> _value="yes")), 
>         TD(TAG.BUTTON("Auto Level",_type="submit",_name="autoLevel", 
> _value="yes")), 
>         TD(TAG.BUTTON("Auto Equalize",_type="submit",_name="autoEQ", 
> _value="yes"))))) 
>     if form.accepts(request.vars,session): 
>         if request.vars.initRSS == 'yes': 
>             print "init RSS" 
>             obs.simpleRSSSetup() 
>         if request.vars.initDSP == 'yes': 
>             print "init DSP" 
>             obs.simpleDSPSetup() 
>         if request.vars.autoLevel == 'yes': 
>             print "autoLevel" 
>             obs.autoLevel() 
>         if request.vars.autoEQ == 'yes': 
>             print "autoEQ" 
>             obs.autoEQ() 
>     return dict(form=form) 
>
> I have a second similar component. I include them both in the larger 
> page as: 
> {{=LOAD('default','inits.load')}} 
> {{=LOAD('default','posControl.load')}} 
>
> Thank you for any suggestions on how to make this work. 
> G

Reply via email to