Thanks for that. Unfortunately, there seems to be a little more to it.
He is a minimal example (using web2py 2.4.6/rocket/windows, although
the behavior is the same with other configurations).
controllers/default.py:
def index():
return dict()
def f1():
val1 = ""
form1 = FORM('Form 1 input:', INPUT(_name='f1input', requires=
IS_NOT_EMPTY()), INPUT(_type='submit'))
if form1.accepts(request,session,formname="formname1"):
val1 = form1.vars.f1input
elif form1.errors:
response.flash = 'Form 1 has errors'
return dict(form1=form1, val1=val1)
def f2():
val2 = ""
form2 = FORM('Form 2 input:', INPUT(_name='f2input', requires=
IS_NOT_EMPTY()), INPUT(_type='submit'))
if form2.accepts(request,session,formname="formname2"):
val2 = form2.vars.f2input
elif form2.errors:
response.flash = 'Form 2 has errors'
return dict(form2=form2, val2=val2)
views/default/f1.load:
<p>{{=val1}}</p>
{{=form1}}
views/default/f2.load:
<p>{{=val2}}</p>
{{=form2}}
views/default/index.html:
{{extend 'layout.html'}}
{{=LOAD('default','f1.load',ajax=True)}}
{{=LOAD('default','f2.load',ajax=True)}}
The behavior is unpredictable. Sometimes the first submit for form 1
doesn't do anything. You may need to refresh several times to reproduce.
Bug, or I have I done something wrong?
Neil
On Sunday, 21 April 2013 20:19:25 UTC+1, Anthony wrote:
>
> Probably both forms have the same formname, either because they are both
> based on the same DAL table or because they are both SQLFORM.factory forms.
> To avoid the problem, assign unique formnames to each via
> .process(formname='myform1'), etc. This is discussed in the book:
> http://web2py.com/books/default/chapter/29/07#Multiple-forms-per-page.
>
> Note, the problem isn't really limited to multiple forms on the same page,
> but to multiple forms with the same name in the same browser session (even
> if loaded into different tabs/windows that are open at the same time). The
> problem is that the value of the formkey is stored in the session with a
> key like "_formkey[formname]". If a second form is created before the first
> form has been submitted, the formkey associated with that particular
> formname will be overwritten, so when the first form is submitted, it will
> not be accepted. However, the submission itself will once again replace the
> formkey value, so if you immediately submit a second time, it will work.
>
> Anthony
>
> On Sunday, April 21, 2013 5:03:06 AM UTC-4, Neil wrote:
>>
>> I'm having this problem now - is there a trick to having two ajax forms
>> on one page?
>>
>> Basically, as above, I have to hit submit twice for anything result. Has
>> anyone successfully had 2+ ajax forms on the same page?
>>
>> On Wednesday, 21 July 2010 08:37:54 UTC+1, mdipierro wrote:
>>>
>>> will look into this.. it must be a JS issue.
>>>
>>> On Jul 20, 9:10 pm, ionel <[email protected]> wrote:
>>> > Hello,
>>> >
>>> > I try to add two ajax forms into a page with something like this:
>>> >
>>> > {{=LOAD(url=URL(r=request,f='add_person.load'), ajax=True)}}
>>> > {{=LOAD(url=URL(r=request,f='add_image.load'), ajax=True)}}
>>> >
>>> > If the form has errors, the error messages are displayed after a
>>> > second submit. So, I need to click two times the submit button to
>>> > display them.
>>> >
>>> > The second form has a normal behavior.
>>> >
>>> > Thanks.
>>> >
>>> > i.a.
>>
>>
--
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.