Steven Matthews
Steven Matthews

Reputation: 11285

Getting getElementById is Undefined

Here's my code:

<html>
<header>
<title>Checkup Date</title>
<script type="text/javascript">
function datechange() {
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject

("Microsoft.XMLHTTP");

  }

var tr = getElementsById(nameUpdate)
var tds = tr.getElementsByTagName('td');
var user = "";
var date = "";
for(var i = 0, len = tds.length; i < len; ++i) {
    user = tds[0];
    date = tds[3];
}


var url = "changedate.psp"
var params = "user=" + user + "&date=" + date;

xmlhttp.open("GET", url + "?" + params, true);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

}

</script>
</header>

<body>

<%
Python that doesn't matter
%>

<%= More Python %>

</body>
</html>

My outputted HTML:

<tr id="TL-D03">
<td>nobody</td>
<td>TL-D03</td>
<td>2010-01-01</td>
<td>
<input type="checkbox" onclick="var nameUpdate = 'TL-D03'; datechange();">

What am I doing wrong here? It says getElementById is undefined.

Upvotes: 1

Views: 15302

Answers (6)

James Hill
James Hill

Reputation: 61792

getElementById is a function of document:

var tr = document.getElementById("nameUpdate")

MDN: https://developer.mozilla.org/en/DOM/document.getElementById

Upvotes: 3

Fr&#233;d&#233;ric Hamidi
Fr&#233;d&#233;ric Hamidi

Reputation: 262919

It's document.getElementById(), not getElementsById(), as it only returns one element.

The latter would not be very useful, since id attributes must be unique within an HTML document.

Upvotes: 1

Quentin
Quentin

Reputation: 943214

The reason it doesn't work is that var scopes a variable to the function it is defined in, so it isn't readable outside the anonymous function assigned to the onclick handler.

In more general "wrongness" terms, passing data about using globals is generally a bad idea.

Pass it as an argument instead.

function datechange(nameUpdate) {

and

datechange('TL-D03');

Upvotes: 0

Dimitri
Dimitri

Reputation: 7013

Also try changing:

<input type="checkbox" onclick="var nameUpdate = 'TL-D03'; datechange();">

to this:

<input type="checkbox" onclick="datechange('TL-D03')">

and

function datechange() {

to this

function datechange(nameUpdate) {

makes more sence

Upvotes: 1

lonesomeday
lonesomeday

Reputation: 237845

Problem 1: you're calling getElementsById. IDs are unique: the function is getElementById. No s.

Problem 2: getElementById is not a global function. You need to call it on the document object:

var tr = document.getElementById(nameUpdate)

After all, your script could reference more than one document (for example, with an iframe), so you need to be explicit about where you expect the element to be.

Upvotes: 1

xgencoder
xgencoder

Reputation: 419

you need to use document.getElementById("yourelementid")

Upvotes: 0

Related Questions