Problém se mi nepodařilo reprodukovat. Na rozdíl od zjištění OP funguje níže uvedený řádek dobře na nejnovějších verzích IE, FF, Opera, Chrome a Safari.
link.onclick = function() {alert('clicked');};
Můžete navštívit tento jsFiddle a otestovat ve svém vlastním prohlížeči:
http://jsfiddle.net/6MjgB/7/
Za předpokladu, že na html stránce máme toto:
<div id="x"></div>
Následující kód funguje dobře v prohlížečích, se kterými jsem to zkoušel:
var link = document.createElement('a');
link.appendChild(document.createTextNode("Hi"));
link.setAttribute('href', "#");
link.onclick= function() {link.appendChild(document.createTextNode("Clicked"));}
document.getElementById("x").appendChild(link);
Pokud se vyskytne problém s kompatibilitou prohlížeče, použití jQuery by to mělo vyřešit a kód by měl být mnohem stručnější:
var $link = $("<a>").html("Hi").attr("href","#").click(function (){$link.html("Clicked")})
$("#x").html($link)
Pokud stručnost není dostatečně silným argumentem pro použití jQuery, měla by být kompatibilita prohlížeče ... a naopak :-)
POZNÁMKA:V kódu nepoužívám alert(), protože se zdá, že se to jsFiddle nelíbí :-(
Pomocí addEventListener(...)
můžete přidat sudý posluchač DOM jak řekl David. Zahrnul jsem attachEvent
pro kompatibilitu s IE.
var link = document.createElement('a');
link.setAttribute('href', "#");
if(link.addEventListener){
link.addEventListener('click', function(){
alert('clicked');
});
}else if(link.attachEvent){
link.attachEvent('onclick', function(){
alert('clicked');
});
}