jshanman wrote:
bradb wrote: This is the function that gets called to create the checkbox...
function ent_source(num) {
var str = "source_"+num;
var id_field = "src_over"+num;
var replace = "(Source Over?)<input type=checkbox id='"+id_field+"'
onClick='updateField("+id_field+")'>";
document.getElementById(str).innerHTML = replace;
}
And I get an error immediately after clicking the check box saying
something like:
Error: src_over10 is not defined
Its looking for the object or variable src_over10, you want it to pass
the string "src_over10".
Not necessarily. It might be that the OP is using the deprecated IE-based
method of accessing element objects by their respective property of the
Global Object (or the object that comes before it in the scope chain) in
the event handler attribute value.
So change this: var replace = "(Source Over?)<input type=checkbox id='"+id_field+"'
onClick='updateField("+id_field+")'>";
To this:
var replace = "(Source Over?)<input type=checkbox id='"+id_field+"'
onClick='updateField(\'"+id_field+"\')'>";
Notice the two \' around the "+id_field+" , it's probably hard to see.
This will send the string "src_over10" to the updateField function,
which can be used with a getElementById.
No, it won't. One important aspect of SGML-based attribute value delimiters
is that they must not occur unescaped (in _markup_ terms) in the attribute
value, else the attribute value is considered to end there. Here the
attribute value delimiter is the apostrophe or single quote ('), therefore
it must not occur in the attribute value.
The markup parser does not care about the ECMAScript string literal notation
that might have been used to generate it because it never sees that code,
including the escape sequence "\'". It only sees "'", and therefore (if we
assume that num === 10)
<input type=checkbox id='"src_over10' onClick='updateField('src_over10')'>
^ ^
The trailing "src_over10')'" may be ignored as an unrecognized attribute
value by the markup parser instead of causing an error. The recognized
attribute value, 'updateField(', is a syntax error for the script engine
to which this is passed, though.
Therefore, one correct variant is:
var replace = "(Source Over?)<input type='checkbox' id='" + id_field
+ "' onClick='updateField(\"" + id_field + "\")'>";
(it helps to pretty-print code ;-)) which generated
...<input type='checkbox' id='src_over10'
onClick='updateField("src_over10")'>
in that case (watch for word wrap).
However, the target element of an event can be referred to with `this':
var replace = '(Source Over?)<input type="checkbox"'
+ ' onclick="updateField(this);">';
which generated
...<input type="checkbox" onclick="updateField(this);">
always.
You will observe that the generated checkbox does not need an ID at all
if object references are passed to and used directly in the updateField()
method, and the checkbox form control is not referred elsewhere.
The generated '(Source Over?)' substring is... strange, BTW.
PointedEars