Is it possible to create dynamic var

L

Laser Lips

You can use the eval function....

var somVar ="SomeValue";

var Elementname = "var yourName" + somVar + "='Hello';";

eval(Elementname);
alert(yourNameSomeValue);

Graham
 
T

Thomas 'PointedEars' Lahn

DL said:
For instance,

function addNew(i) {
var 'element'&i
..
}

If possible, how to?

While eval() is a possibility, and a bad one at that, chances
are that you really don't need what you want. Consider this:

function addNew(i)
{
var a = [];
a = 42;
...
}


PointedEars
 
L

Laser Lips

DL said:
For instance,
function addNew(i) {
var 'element'&i
..
}
If possible, how to?

While eval() is a possibility, and a bad one at that, chances
are that you really don't need what you want.  Consider this:

  function addNew(i)
  {
    var a = [];
    a = 42;
    ...
  }

PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee


What alternatives are there?
 
D

Dr J R Stockton

In comp.lang.javascript message <876f5ddc-6d98-4995-b0d0-8c8e110522e5@s5
0g2000hsb.googlegroups.com>, Sat, 10 May 2008 07:31:42, Laser Lips
You can use the eval function....

var somVar ="SomeValue";

var Elementname = "var yourName" + somVar + "='Hello';";

eval(Elementname);
alert(yourNameSomeValue);

If you had read the newsgroup FAQ carefully, and its Notes, you would
have known better than to suggest that.

It's a good idea to read the newsgroup c.l.j and its FAQ. See below.
 
D

DL

DL said:
For instance,
function addNew(i) {
var 'element'&i
..
}
If possible, how to?

While eval() is a possibility, and a bad one at that, chances
are that you really don't need what you want.  Consider this:

  function addNew(i)
  {
    var a = [];
    a = 42;
    ...
  }


Thank you both. I kind of like the above approach, it does not seem
to solve the problem.
Here's more detail:

function addNew(i) {
var newF = document.getElementById('tbl');
var a = [];
a = newF.insertRow();
// ...
}

The above code failed. A related question, how to increment a value?
The following won't work
// the i value is param for a function like the above one, not be
concerned
var rowCount = 1;
rowCount = eval(rowCount + i);
alert (rowCount);
 
V

VK

For instance,

function addNew(i) {
var 'element'&i
..

}

If possible, how to?

Javascript is not a prehistoric BASIC subset for such perversions. If
you need uniformly accessible elements of unknown in advance amount
then use array:

var myElements = new Array;

function addNew(i) {
myElements = whatever;
}

If you really need properties named like "foo1', "foo2" etc. then use
object's squared brackets notation:

var myElements = new Object;

function addNew(i) {
myElements['foo'+i] = whatever;
}
 
D

DL

For instance,
function addNew(i) {
var 'element'&i
..

If possible, how to?

Javascript is not a prehistoric BASIC subset for such perversions. If
you need uniformly accessible elements of unknown in advance amount
then use array:

var myElements = new Array;

function addNew(i) {
 myElements = whatever;

}

If you really need properties named like "foo1', "foo2" etc. then use
object's squared brackets notation:

var myElements = new Object;

function addNew(i) {
 myElements['foo'+i] = whatever;



}- Hide quoted text -

- Show quoted text -


Thanks. First let me get simple thing off the list first, your

var myElements = new Array;
is probably similar to
var myElements = []; // the later is a short form probably, yes?

Now, back to the main topic. Also, I should have been clearer about
the intent of the code, that is, to dynamically add TR or (TRs) for an
existing table with ID of 'tbl'.

Neither Array nor Object works for this case while
by doing so by hand, e.g.
var newF = document.getElementById('tbl');
var tr1 = newF.insertRow();

would work. But

var newF = document.getElementById('tbl');
var myElements = new Array;

function addNew(i) {
myElements = newF.insertRow();

won't work.

It seems to be me pretty odd that javascript can't handle 'dynamic
variable assignment'

Thanks.
 
D

DL

Javascript is not a prehistoric BASIC subset for such perversions. If
you need uniformly accessible elements of unknown in advance amount
then use array:
var myElements = new Array;
function addNew(i) {
 myElements = whatever;

If you really need properties named like "foo1', "foo2" etc. then use
object's squared brackets notation:

var myElements = new Object;
function addNew(i) {
 myElements['foo'+i] = whatever;
}- Hide quoted text -
- Show quoted text -

Thanks.  First let me get simple thing off the list first, your

var myElements = new Array;
is probably similar to
var myElements = []; // the later is a short form probably, yes?

Now, back to the main topic.  Also, I should have been clearer about
the intent of the code, that is, to dynamically add TR or (TRs) for an
existing table with ID of 'tbl'.

Neither Array nor Object works for this case while
by doing so by hand, e.g.
var newF = document.getElementById('tbl');
var tr1 = newF.insertRow();

would work. But

var newF = document.getElementById('tbl');
var myElements = new Array;

 function addNew(i) {
 myElements = newF.insertRow();

won't work.

It seems to be me pretty odd that javascript can't handle 'dynamic
variable assignment'

Thanks.- Hide quoted text -

- Show quoted text -


Ok, you guys are right, I don't even need dynamic vars. Now got a
minor question,
the following attempt of setting a newly created cell alignment to
right won't work,
e.g. newCell1.style.align = "right";
what's wrong?

Thanks.
 
A

Andrew Poulos

DL said:
Ok, you guys are right, I don't even need dynamic vars. Now got a
minor question,
the following attempt of setting a newly created cell alignment to
right won't work,
e.g. newCell1.style.align = "right";
what's wrong?
Shouldn't it be
newCell1.style.textAlign = "right";

Andrew Poulos
 
V

VK

e.g. newCell1.style.align = "right";

align="left/right/center" is an attribute of the cell itself, not a
CSS rule.
Either:
newCell.align = 'right';
or
newCell.style.textAlign = 'right';
// the latter is lesser functional than the first one
 
T

Thomas 'PointedEars' Lahn

DL said:
DL said:
For instance,
function addNew(i) {
var 'element'&i
..
}
If possible, how to?
While eval() is a possibility, and a bad one at that, chances
are that you really don't need what you want. Consider this:

function addNew(i)
{
var a = [];
a = 42;
...
}


Thank you both. I kind of like the above approach, it does not seem
to solve the problem.


The problem is that you are apparently resistant to studying for yourself.
You will not achieve anything until you solve this problem.
Here's more detail:

function addNew(i) {
var newF = document.getElementById('tbl');
var a = [];
a = newF.insertRow();
// ...
}

The above code failed.


A useless error description. See also <http://jibbering.com/faq/#FAQ4_43>.

And that it failed is unlikely, since it is syntactically correct since
JavaScript 1.3 (NN 4), JScript 2.0 (NT 4), ECMAScript Ed. 3. It is more
likely that you don't know what you are doing, and therefore you have used
it wrong.

What replaces the ellipsis matters here. You may have expected `a[1]' to be
accessed as `a1' later which is not the case. My solution provides you with
a way to let go of several numbered variables and to use an array data
structure instead.
A related question, how to increment a value?
The following won't work

See above.
// the i value is param for a function like the above one, not be
concerned
var rowCount = 1;
rowCount = eval(rowCount + i);

RTFM. The above *equals* the most simple

rowCount = rowCount + i;

or

rowCount += i;

That is, provided `i' is a number value. If it is not, you will observe NaN
as result or string concatenation instead (e.g. rowCount === "14" if i ===
"4"). To convert a value to the number type explicitly, there are several ways.

RTFFAQ: http://jibbering.com/faq/#FAQ4_21
alert (rowCount);

Should be

window.alert(rowCount);


PointedEars
 
T

Thomas 'PointedEars' Lahn

VK said:
align="left/right/center" is an attribute of the cell itself, not a
CSS rule.

Obviously you don't know what a CSS rule is:

http://www.w3.org/TR/CSS2/syndata.html#q8
Either:
newCell.align = 'right';
or
newCell.style.textAlign = 'right';
// the latter is lesser functional than the first one
^^^^^^^^^^^^^^^^^
Considering we will celebrate CSS2's 10th birthday tomorrow, how did you get
that idea?


PointedEars
 
D

DL

align="left/right/center" is an attribute of the cell itself, not a
CSS rule.
Either:
  newCell.align = 'right';
or
  newCell.style.textAlign = 'right';
  // the latter is lesser functional than the first one

Thank you.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,141
Messages
2,570,818
Members
47,367
Latest member
mahdiharooniir

Latest Threads

Top