Connecting Tech Pros Worldwide Help | Site Map

eval() problem for dynamic object referencing

 
LinkBack Thread Tools Search this Thread
  #1  
Old July 20th, 2005, 11:24 AM
Simon
Guest
 
Posts: n/a
Default eval() problem for dynamic object referencing

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

  #2  
Old July 20th, 2005, 11:24 AM
Lee
Guest
 
Posts: n/a
Default Re: eval() problem for dynamic object referencing

Simon said:[color=blue]
>
>Am using the following code.
>
><script language="JavaScript1.2">
>
>function setquantity(productindex,productquantity)
>{
> //create the reference object
> irefname_none = eval("document." + productindex + "none");[/color]

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");

  #3  
Old July 20th, 2005, 11:25 AM
Lasse Reichstein Nielsen
Guest
 
Posts: n/a
Default Re: eval() problem for dynamic object referencing

simon_glynn@email.com (Simon) writes:

Yes, using eval for dynamic object referencing *is* a problem, so
don't do it! :)
[color=blue]
> Am using the following code.
>
> <script language="JavaScript1.2">[/color]

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.
[color=blue]
> function setquantity(productindex,productquantity)
> {
> //create the reference object
> irefname_none = eval("document." + productindex + "none");[/color]

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.
[color=blue]
> 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>[/color]

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
[color=blue]
> when I run this, the javascript console shows me an error as follows
>
> Error Missing ; before statement
> Line 9
> document.1none[/color]

Yes, a property called "1none" is not accessible using the dot-notation,
you must use square brackets.
[color=blue]
> Any suggestions appreciated. Testing and developing this on Mozilla
> 1.2.1, Linux[/color]

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 - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'
 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

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 Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,989 network members.