Hallo,
var select = document.createElement("select");
...
attrib = document.createAttribute("onchange");
attrib.nodeValue = "update(" + id + ");";
select.setAttributeNode(attrib);
> ~~~javascript
select.onchange = function() {
> update(id);
> };
Achtung! Böse Falle. ;-) Die beiden Codebeispiele sind nicht identisch. Im ersten wird die Funktion update mit dem _Wert_ der Variable id als Argument aufgerufen, also bspw.: var id=5; ... attrib.nodeValue = "update(" + id + ");";, dann wird update(5) aufgerufen.
Im zweiten Beispiel wird die Funktion update mit der Variablen id als Argument aufgerufen, also update(id). Die Variable id ist dabei, wenn sie nicht global ist, aus dem Gültigkeitsbereich der Funktion, welche das select.onchange = function() {update(id);}; ausführt.
Eventuell muss hier also, je nach Art und Bedeutung der Variablen id, ein Function Object erzeugt werden.
Hier mal ein Beispiel, welches den Unterschied zeigt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Titel</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<script language="JavaScript">
<!--
var id = 6;
function update(id) {
alert(id);
}
function init() {
var a = document.forms[0].tf1
var b = document.forms[0].tf2
var id = 123;
a.onchange = function() {update(id);};
//a.onchange = new Function("update(" + id+ ")");
id = 456;
b.onchange = function() {update(id);};
//b.onchange = new Function("update(" + id+ ")");
}
window.onload = init;
//-->
</script>
</head>
<body>
<form action="#" method="get">
<input type="Text" name="tf1" value="" size="20" maxlength="20">
<input type="Text" name="tf2" value="" size="20" maxlength="20">
<input type="Text" name="tf3" value="" size="20" maxlength="20">
</form>
</body>
</html>
Im jetzigen Zustand wird als Wert für id _immer_ 456 übergeben werden, weil immer update(id) aufgerufen wird. Kommentiert man die .onchange = function() {update(id);}; aus und löscht die Kommentarzeichen vor .onchange = new Function("update(" + id+ ")");, dann wird bei a.onchange update(123) und bei b.onchange update(456) aufgerufen.
viele Grüße
Axel