[Javascript] error in "JavaScript: The Definitive Guide"?
John Deighan
jdeighan at pcgus.com
Wed Nov 29 07:04:18 CST 2006
I think I've found an error in the JavaScript book I use the most.
Before reporting it to O'Reilly, though, I thought I'd pass it by
some of the JavaScript gurus on this list. The book says:
For input elements of type "radio" and "checkbox", it is common to
define more than one related object, each of which have the same
'name' property. In this case, data is submitted to the server with
this format:
name=value1,value2,...,valuen
I've checked with a simple HTML page that submits to a Perl script,
and the query string that the script receives has duplicate entries
with the same name, like this:
name=1&name=2&name=3
including only those values where the checkbox was actually checked.
I checked both IE and FF, and, in fact, I've programmed functions
that split a query string and this is the way it was always done.
Also, I think this is the correct way, though it does lead to
problems if you try to put the values of CGI variables into a hash,
because a hash can have only one entry for each key. You might say
that in that case, you could put the values into a list, but there's
no way to know if the original form had multiple checkboxes, but the
user only checked one, so that would still give programmers headaches
since they would expect a list, but not get one. Anyway, I digress...
I guess what I'm not positive about is whether the data is actually
sent in the first form, but the CGI subsystem converts it to the
second form before passing it to my Perl script. At first I thought
that that could not be the case since I'm able to distinguish whether
two checkboxes with the values '1' and '2' were checked, from the
case where a single checkbox with the value '1,2' was checked.
However, when I tried it I realized that a comma in a checkbox's
value would be escaped, so it's possible that the first case is sent as:
name=1,2
and the second is sent as:
name=1%2C2
so they could be distinguished. So, does anyone know what's really
going on here?
P.S. I guess I could figure this out myself if I knew how to use a
packet sniffer like Ethereal. I have it, but never found the time to
figure it out.
More information about the Javascript
mailing list