Javascript 如何将事件处理程序绑定到正在创建的元素?

Javascript 如何将事件处理程序绑定到正在创建的元素?,javascript,prototypejs,Javascript,Prototypejs,在我的页面中,我必须根据用户的操作动态创建一些元素,例如,当用户单击按钮时,我将创建一个新的div,但我想向该div添加一个click处理程序: function createNewDiv(){ var str="<aid='na'>xxx</a>"; //add click handler to this a var ele=document.getElementById("na"); if(ele.attachEvent){ ele.attac

在我的页面中,我必须根据用户的操作动态创建一些元素,例如,当用户单击按钮时,我将创建一个新的div,但我想向该div添加一个click处理程序:

function createNewDiv(){
  var str="<aid='na'>xxx</a>";
  //add click handler to this a
  var ele=document.getElementById("na");
  if(ele.attachEvent){
    ele.attachEvent("onclick",function(){xxxx});
  }else if(ele.addEventListener){
    ele.addEventListener("click",function(){xxx},false);
  }
  document.getElementById("con").innerHTML="s";
}
HTMLDOM正在构建中,因此它找不到元素。(我认为这就是为什么我们使用jquery.ready(xxx)

如果是的话,有什么办法让它发挥作用吗

我在我的应用程序中使用Prototype 1.4


谢谢你的回答

现在用
代替

但是由于某种原因,我不能使用dom来构建我的元素,也就是说,我不能使用:

var div_n=document.createElement("a");
a.id="na";
......
相反,我必须使用:

var s="<a id='na'>xxx</a>";

//append this created link to the existed container
document.getElementById("con").innerHTML=s;

//then how to add the click handler to the `a#na`?
var s=“xxx”;
//将此创建的链接附加到现有容器
document.getElementById(“con”).innerHTML=s;
//那么如何将click处理程序添加到'a#na'?

您可以改为使用DOM创建div。这将使其立即可用于添加事件处理程序。例如:

函数createNewDiv(){
var ele=document.createElement(“div”);
div.setAttribute(“id”、“nDiv”);
// ...
文件.getElementById(“con”).appendChild(ele);
}
旁注:

与innerHTML相比,使用DOM来实现这一点也要快得多,标准也要高得多。但是人们倾向于使用innerHTML,因为它更简单

var str="<div id="nDiv">xxx</div>"

你想进入
ele
的元素是什么?如果我理解你的问题,你想在你正在创建的
div
中添加一个事件,并且
div
具有
id=nDiv
,那么你为什么要尝试获取一个具有
id=con
的元素?如果你想将一个事件绑定到你创建的div,可以e你可以这样做:

function createNewDiv(){
  var div = document.createElement('div');
  div.id = 'nDiv';
  //add click handler to this div
  div.addEventListener("click",function(){xxx},false);
  div.innerHTML="s";
}
function foo(){xxx}
...
div.addEventListener("click",foo,false);
...
如果绑定函数时遇到问题(我不这么认为),请尝试定义函数并将其绑定到“单击此方式”:

function createNewDiv(){
  var div = document.createElement('div');
  div.id = 'nDiv';
  //add click handler to this div
  div.addEventListener("click",function(){xxx},false);
  div.innerHTML="s";
}
function foo(){xxx}
...
div.addEventListener("click",foo,false);
...

请注意,在绑定
foo
函数时没有括号。

getElementById是否应该与您正在创建的div的id相同?评论说您正在尝试向新div添加一个单击处理程序,但id不同。我只是想弄清楚,它是否工作不会有什么区别你想做什么。嗨,我更新了我的帖子,我想把点击处理程序添加到新创建的div中。谢谢你更新了你的帖子。我回答了我的答案,我想这是对的,因为另外两个人在我后面发布了相同的答案;)