views:

48

answers:

0

I have this web application where users are able to fill out and submit reports. The reports and scripts are part of a whole system, that is, they are used on a couple of different clients written in both vb and c#. This is the web-version of those clients.

The scripting language is javascript and is executed using different script engines on the different systems. But for the web-version it is just executed in the browser.

The different fields in the report can be accessed by typing: ID1.value. To get ID1 to apply for the input-field with id ID1 I had to in the initfunction of the page write a window["ID1"] = document.getElementById("ID1");

But my problem is when this element change. Cause in the report I have a special element that in the browser is translated to a table-element with a report-field in each cell.

When I switch the current row, I need to update the window["ID1"] to equal the correct report field on the selected row. But when trying to access the new variable ID1 from a buttons onclick event it is undefined.

What I think happens is that when the page is first drawn the onclick event is created and as I understand, variables inside an event has the same value (same scope) as when the event was created.

So if ID1.value was something when the page was created it will be the same when it is called even if the value of ID1 is different. And that seems to be the case. When I debug the page, before entering the event, ID1.value has the correct value while inside the event it is undefined and after the event it has the correct value and ontop of that, if I write window["ID1"], correct value is also shown in all cases.

But a weird thing is that in another place in the code I had the same problem but instead of having the code inside the onclick event I first had a global function changeActiveRow and inside that I had an eval, eval(document.getElementById("ID1_script")) where ID1_script is a hidden element whos value is a script using ID1.value and that works.

Can someone explain this ?

Thanks