In order for web2py to submit forms inside LOAD components via Ajax, it must set up its own event handler to "trap" the form submission, so it can be intercepted -- this is done here: https://github.com/web2py/web2py/blob/master/applications/welcome/static/js/web2py.js#L307 .
If you don't want web2py to trap the form, try: <form class="no_trap" ...> Alternatively, create the entire form via Javascript *after* the component has been loaded. Anthony On Friday, May 31, 2019 at 3:57:50 PM UTC-5, Vlad wrote: > > sorry for keeping posting about this. I am just totally stuck. I am sure > that I am missing something very basic. Here is the complete code: > > <form action="{{=URL('credit_card_saved')}}" method="post" id= > "payment-form2"> > <button>Submit</button> > </form> > > > <script> > > > function CustomizeFormSubmission2(event) { > event.preventDefault(); > var form = document.getElementById('payment-form2'); > var element = document.createElement('input'); > element.setAttribute('type', 'hidden'); > element.setAttribute('name', 'stripeToken'); > element.setAttribute('value', "THIS_IS_TOKEN"); > form.appendChild(element); > form.submit(); > } > > > var form = document.getElementById('payment-form2'); > form.addEventListener('submit', CustomizeFormSubmission2); > > > So when this is placed in the view straight - it's perfect. Behaves as > expected. > > However, if it's placed into the component via LOAD, it grossly > malfunctions. Not only the post_vars is empty, but even > event.preventDefault(); > > doesn't work either (if I remove form.submit, it's still immediately > submitting the form). > What am I missing about how LOAD is expected to operate?? How do I make it > work?? > > > On Friday, May 31, 2019 at 3:41:14 PM UTC-4, Vlad wrote: >> >> I've narrowed down what's going on, but still stuck... >> >> this is how the form is being submitted (from inside of the component): >> >> function stripeTokenHandler(token) { >> var form = document.getElementById('payment-form'); >> var hiddenInput = document.createElement('input'); >> hiddenInput.setAttribute('type', 'hidden'); >> hiddenInput.setAttribute('name', 'stripeToken'); >> hiddenInput.setAttribute('value', token.id); >> form.appendChild(hiddenInput); >> form.submit(); >> } >> >> it seems to me that document.createElement('input') doesn't create an >> element under the topmost document (I don't really understand this well, >> but when this code is in the main html - not in the component- it works >> correctly and submits the proper data to the form action url) >> >> I just can't think of anything else here - those variables that are >> hardcoded in the form, i.e. not submitted via created on the fly in input >> fields - are passed over correctly. >> >> Greatly appreciate some help... >> >> On Friday, May 31, 2019 at 2:38:06 PM UTC-4, Vlad wrote: >>> >>> I am loading a component with LOAD. the component has the form on it. >>> the form is submitting via post method. >>> >>> request.post_vars is empty. the variables don't go through. >>> >>> when I copy the same very code and pasting it in the view (i.e. instead >>> of the LOAD component - while taking the LOAD line out) - with not even a >>> single change, just copy and paste - >>> request.post_vars is correct - filled with whichever parameters are >>> coming from the form. >>> >>> is this a feature or a bug? :) >>> >>> is there something subtle I am missing about those components? I've >>> tried both - loading the component with ajax true and ajax false - same >>> thing. And the same thing happens when I tried to submit with get method. >>> >>> Other than not having vars set - everything else functions right. The >>> form is submitted... >>> >>> Any ideas? >>> >>> >>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- 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 web2py+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/fab650af-3326-4a7b-a394-05eca5bb56ea%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.