Adding a JavaScript event handler to a form¶
Description
Need to make your PFG forms more dynamic? It's easy to add JavaScript.
There are two basic steps to injecting JavaScript into a PFG form:
- Use the Zope Management Interface to create a text file (object type: file; mimetype: text/plain) either inside the form folder or in a skin folder;
- Use the form folder's edit / overrides pane, header injection field to tell PFG to inject it into the form.
Injection¶
Let's look at the second step first. Let's say that your JavaScript file is named form_js. Then just specify:
here/form_js
in the header injections override field.
The JavaScript¶
There are a couple of considerations here:
-
Since this is a header injection, you'll need to supply
the
SCRIPT
tags; - You'll nearly certainly want to use jQuery to attach the event handler, since jQuery is part of Plone.
<script>
jQuery(function($) {
$('#my-questions :input')
.click(function() {
alert('checkbox clicked');
});
});
</script>
This code fragment shows off both, and attaches an alert
to every input in the
mqy-questions
field.
Note the use of the common jQuery idiom:
jQuery(function($) {
...
});
This accomplishes a couple of things: 1) it sets the code up to run once the page is loaded; 2) it aliases "jQuery" to "$" so that we may use common jQuery shorthand.
An alternative injection¶
If you want to use a separate JavaScript file that is
actual JS (no
script
tags) and will be shared among forms, just use the header
injection override like this:
string:<script src="form_scripts.js" />
assuming your script is named
form_scripts.js
. You may make it a little more sophisticated if you need
an absolute URL:
string:<script src="${here/form_scripts.js/absolute_url}" />
using TALES string interpolation.