Sorry, it wasn't clear that it was failing upon change of select_1. It 
might help to show more of the code that creates and displays the form, as 
it is not quite clear how everything is working. In particular, I don't 
quite get what that view code is doing and where it is used.

Anthony

On Saturday, June 22, 2013 1:55:18 PM UTC-4, lesssugar wrote:
>
> Yes, of course you're right, I guess I wasn't clear enough. The real 
> problem is this: what if a user needs to change the value of select_1 in 
> order to update their data? Then, depending on what they choose, select_2 
> should still be auto-populated.
>
> I don't get why code which works for insert form fails when it comes to 
> update. Can it be connected to the fact that the update form shows specific 
> value of select_1? Not sure. But jquery change() should anyway spot the 
> select change action and trigger ajax().
>
> On Saturday, June 22, 2013 7:39:05 PM UTC+2, Anthony wrote:
>>
>> $('#select_1').change(function()
>>
>> You're using a "change" event handler, so it will only fire when the 
>> value of select_1 is changed. When the update form is first loaded, the 
>> existing record's value for select_1 is shown, but there is no change event 
>> to trigger the retrieval of the select_2 values.
>>
>> Note, for an update form, it should be possible to populate select_2 on 
>> the server rather than via ajax, since you already have the value of 
>> select_1.
>>
>> Anthony
>>
>> On Saturday, June 22, 2013 1:29:02 PM UTC-4, lesssugar wrote:
>>>
>>> I have 2 select boxes. I managed to auto-populate second select box 
>>> based on value from the first one. All of the code below works just fine 
>>> when I create new record - second select is being populated. However, when 
>>> I try to update the same record, select_2 does not get populated, as if the 
>>> *department* variable never reached the *populate* function. As a 
>>> result, there's a view rendered within select_2 instead of 
>>> <option></option> elements. This occurs only in the update form.
>>>
>>> The script passing *department *variable from select_1:
>>>
>>> <script>
>>>     $('#select_1').change(function() {
>>>         ajax('populate', ['department'], 'select_2');
>>>     });
>>> </script>
>>>
>>> *populate *function which uses "department" var to get respective data:
>>>
>>> def populate():
>>>
>>>     ranks = db(db.rank.department_id == request.vars.department).select(
>>> db.rank.id, db.rank.name, orderby=db.rank.name)
>>>
>>>     result = ""
>>>
>>>     for r in ranks:
>>>         result += "<option value='" + str(r.id) + "'>" + r.name + 
>>> "</option>"
>>>
>>>     return XML(result)
>>>
>>> view:
>>>
>>> <div class="w2p_fw">
>>>     {{if request.vars.department:}}
>>>         <select class="generic-widget" id="seafarer_experience_rank" 
>>> name="rank">
>>>             {{=XML(result)}}
>>>         </select>
>>>     {{else:}}
>>>         {{=form.custom.widget.rank}}
>>>     {{pass}}
>>> </div>
>>>
>>>
>>>

-- 

--- 
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.


Reply via email to