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.

Reply via email to