Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Javascript > eval() problem for dynamic object referencing

Reply
Thread Tools

eval() problem for dynamic object referencing

 
 
Simon
Guest
Posts: n/a
 
      10-28-2003
Am using the following code.

<script language="JavaScript1.2">

function setquantity(productindex,productquantity)
{
//create the reference object
irefname_none = eval("document." + productindex + "none");

<snip>

and set quantity is called as follows further on in the HTML

<snip>

<td><img style="filter:alpha(opacity=20);-moz-opacity:0.2"
name="1_none" src="none.gif" onclick="setquantity('1','none')" /></td>

<snip>

when I run this, the javascript console shows me an error as follows

Error Missing ; before statement
Line 9
document.1none

Line 9 is the eval line. As a test, if I remove the productindex from
the eval statement it works fine, so doesn't seem to like
productindex, despite a string being passed.

Any suggestions appreciated. Testing and developing this on Mozilla
1.2.1, Linux

Regards
Simon
 
Reply With Quote
 
 
 
 
Lee
Guest
Posts: n/a
 
      10-28-2003
Simon said:
>
>Am using the following code.
>
><script language="JavaScript1.2">
>
>function setquantity(productindex,productquantity)
>{
> //create the reference object
> irefname_none = eval("document." + productindex + "none");


This is one reason why you should never use eval() for
dynamic object referencing. Others include the fact
that it is very inefficient.

If you're referencing images, you could use:

irefname_none=document.images[productindex+"none"];

but the more general solution would be to use an ID
instead of NAME attribute, and use:

irefname_none=document.getElementById(productindex +"none");

 
Reply With Quote
 
 
 
 
Lasse Reichstein Nielsen
Guest
Posts: n/a
 
      10-28-2003
http://www.velocityreviews.com/forums/(E-Mail Removed) (Simon) writes:

Yes, using eval for dynamic object referencing *is* a problem, so
don't do it!

> Am using the following code.
>
> <script language="JavaScript1.2">


In HTML 4, the type attribute is required. The following is the correct,
sufficient and recommended script start tag:

<script type="text/javascript">

Are you aware of the differences between Javascript versions 1.2 and
1.3 and which browsers change behavior (to the deprecated 1.2
behavior) because of your language attribute?

I know the differences, but not which browsers honors the version
number in the language attribute and implements 1.2 behavior.
You most likely don't want to use Javascript 1.2.

> function setquantity(productindex,productquantity)
> {
> //create the reference object
> irefname_none = eval("document." + productindex + "none");


irefnam_none = document[productindex+"none"];

No eval, no problem.
Are you sure the object you are looking for is a property of the
document object, and that it has a name like "1none"?

Your problem is probably that you use the dot-notation with a property
name that is not a legal identifier. I.e.,
document.1none
is illegal since "1none" is not a legal identifer name. You must use
document["1none"]
for that kind of property names.

You probably mean to use
irefname_none = document.getElementById(productindex+"_none"):
instead.

> and set quantity is called as follows further on in the HTML
>
> <snip>
>
> <td><img style="filter:alpha(opacity=20);-moz-opacity:0.2"
> name="1_none" src="none.gif" onclick="setquantity('1','none')" /></td>


This call to setquantity would make
irefname_none = document["1none"]
If you want to refer to this image itself, a better line would be

irefname_none = document.images[productindex+"_none"];
Or better yet, just send the element itself as an argument:
onclick="setquantity(this,'none')"
Then you have the image element readily available as the first argument,
and you don't need to go through

> when I run this, the javascript console shows me an error as follows
>
> Error Missing ; before statement
> Line 9
> document.1none


Yes, a property called "1none" is not accessible using the dot-notation,
you must use square brackets.

> Any suggestions appreciated. Testing and developing this on Mozilla
> 1.2.1, Linux


Drop eval completely. Use names that start with a letter instead of a
number. Use W3C DOM functions or collections to access elements
(document.getElementById or document.images).

/L
--
Lasse Reichstein Nielsen - (E-Mail Removed)
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
dynamic object referencing Colin Hemmings Java 4 01-18-2006 07:37 PM
.html document .innerHTML invisible frames dynamic passage referencing google1@eastontario.com Javascript 0 12-17-2005 05:03 AM
dynamic variable referencing Michael Williams Python 2 12-07-2005 09:44 AM
Object creation - Do we really need to create a parent for a derieved object - can't the base object just point to an already created base object jon wayne C++ 9 09-22-2005 02:06 AM
Referencing an object in another browser instance. Possible? Martin ASP .Net 1 03-01-2004 06:34 AM



Advertisments