I'm stuck this, and would appreciate help or pointers. I have a form with 2 selection drop-downs. I want the user's choice of select 1 to drive the options displayed in select 2. When the user makes a selection in select 1, onChange calls a Javascript function that should write select 2 options based on the result of a call to a Python script, passing the select 1 choice as an argument to the Python script. But: I cannot get the Javascript var into the namespace that the TALES expression knows about. Example: <script> function makeDropDown() { var widget = document.getElementById('select1'); var choice = widget.options[widget.selectedIndex].value; var data = [result of calling Python script 'foo(arg)' with arg=choice] // create options for select 2 } </script> [various html...] <select id="select1" onChange="makeDropDown()"> [options...] </select> I've tried with multiple scripts, where one has tal:content=... but cannot figure out how the TALES expression can get at what my javascript gets from an event. I haven't done much with JavaScript inside Page Templates, so perhaps I'm going about this all wrong. TIA, Rob __________________________________ Discover Yahoo! Stay in touch with email, IM, photo sharing and more. Check it out! http://discover.yahoo.com/stayintouch.html
What I do when the javascript gets too hairy is to stick it in a DTML Method and then do something like this:: <script type="text/javascript" tal:content="structure here/the_script_dtml"></script> or <script type="text/javascript" tal:content="structure python:here.the_script_dtml(here, request, parameterX='Y')"></script> On 6/29/05, Rob Boyd <boydrobh@yahoo.com> wrote:
I'm stuck this, and would appreciate help or pointers.
I have a form with 2 selection drop-downs. I want the user's choice of select 1 to drive the options displayed in select 2. When the user makes a selection in select 1, onChange calls a Javascript function that should write select 2 options based on the result of a call to a Python script, passing the select 1 choice as an argument to the Python script.
But: I cannot get the Javascript var into the namespace that the TALES expression knows about.
Example:
<script> function makeDropDown() { var widget = document.getElementById('select1'); var choice = widget.options[widget.selectedIndex].value; var data = [result of calling Python script 'foo(arg)' with arg=choice] // create options for select 2 } </script> [various html...] <select id="select1" onChange="makeDropDown()"> [options...] </select>
I've tried with multiple scripts, where one has tal:content=... but cannot figure out how the TALES expression can get at what my javascript gets from an event. I haven't done much with JavaScript inside Page Templates, so perhaps I'm going about this all wrong.
TIA, Rob
__________________________________ Discover Yahoo! Stay in touch with email, IM, photo sharing and more. Check it out! http://discover.yahoo.com/stayintouch.html _______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
-- Peter Bengtsson, work www.fry-it.com home www.peterbe.com hobby www.issuetrackerproduct.com
On 6/29/05, Rob Boyd <boydrobh@yahoo.com> wrote:
But: I cannot get the Javascript var into the namespace that the TALES expression knows about.
TALES are executed on the server, when the template is rendered. Javascript is executed on the client after the template has rendered, and hence, well after the TALES have been executed. So, no you can't do that without making a new roundtrip to the server. You have two options: Either use the Javascripts onClick to make an XML call to the server to fetch the new data (not trivial) or send all the data from the start. This last thing is what almost all sites do with all that type of Javascript functionality. -- Lennart Regebro, Nuxeo http://www.nuxeo.com/ CPS Content Management http://www.cps-project.org/
Rob Boyd wrote:
I'm stuck this, and would appreciate help or pointers.
I have a form with 2 selection drop-downs. I want the user's choice of select 1 to drive the options displayed in select 2. When the user makes a selection in select 1, onChange calls a Javascript function that should write select 2 options based on the result of a call to a Python script, passing the select 1 choice as an argument to the Python script.
But: I cannot get the Javascript var into the namespace that the TALES expression knows about.
Example:
<script> function makeDropDown() { var widget = document.getElementById('select1'); var choice = widget.options[widget.selectedIndex].value; var data = [result of calling Python script 'foo(arg)' with arg=choice]
This is impossible, at least in a single request. You are trying to mix server-side and client-side actions. You would have to make a new request on the server with the contents of 'choice' in order to get it processed. This can be done with XML-RPC or some other options; look up 'AJAX' to get a feel for this. Alternately, if you have a known list of values for 'choice' you could generate all the 'data' values for each 'choice' value, encode them in the page's javascript, and look them up client-side. --jcc -- "Building Websites with Plone" http://plonebook.packtpub.com/ Enfold Systems, LLC http://www.enfoldsystems.com
Rob, As others have pointed out the approach you indicate will not work. To summarize - Write python script to dynamically create JAVASCRIPT code (you can format javascript arrays of data from your db this way). Then, using TAL load it in, eg <head> <tal:js replace="structure here/python/pythonThatCreatedJavaScript">javascript here</tal:js> </head> Which is then callable from the other javascript routines in your page. David Rob Boyd wrote:
I'm stuck this, and would appreciate help or pointers.
I have a form with 2 selection drop-downs. I want the user's choice of select 1 to drive the options displayed in select 2. When the user makes a selection in select 1, onChange calls a Javascript function that should write select 2 options based on the result of a call to a Python script, passing the select 1 choice as an argument to the Python script.
But: I cannot get the Javascript var into the namespace that the TALES expression knows about.
Example:
<script> function makeDropDown() { var widget = document.getElementById('select1'); var choice = widget.options[widget.selectedIndex].value; var data = [result of calling Python script 'foo(arg)' with arg=choice] // create options for select 2 } </script> [various html...] <select id="select1" onChange="makeDropDown()"> [options...] </select>
I've tried with multiple scripts, where one has tal:content=... but cannot figure out how the TALES expression can get at what my javascript gets from an event. I haven't done much with JavaScript inside Page Templates, so perhaps I'm going about this all wrong.
TIA, Rob
participants (5)
-
David H -
J Cameron Cooper -
Lennart Regebro -
Peter Bengtsson -
Rob Boyd